В Радзивиловской летописи войско Ярослава определено в 41 000 воинов. (16, 62) В Типографской летописи — в 31 000. (22, 47) В составе войска была 1000 варягов. В Хлебниковском списке Ипатьевской летописи число варягов исчислено в 6000 человек. (5, 128)
В новгородском летописании находим более скромную и более правдоподобную численность выступившего из Новгорода войска: 4000. Оно состояло из 1000 варягов и 3000 новгородцев.
Войско Ярослава под Любечем имело одну особенность, которую не преминули подметить его противники. Во время противостояния на Днепре киевский воевода Волчий Хвост бранился:
«И воевода Святополч нача, ездя возле берега, укаряти новгородцев, глаголя: «Что приидосте со хромцем сим? А вы плотници суще, да приставим вас хо(ро)мов рубити наших»». (16, 62)
Киевлянам противостояло ущербное воинство. Калека возглавлял плотников, пригодных не для войны, а только для обслуживания киевлян. Проще говоря, урод во главе всякого сброда.
Упоминание плотницкой части войска говорит о том, что убыль воинов Славенского конца возместили набором воинов из новгородского района Плотники. Плотники, расположенные на берегу Волхова рядом с Торгом, занимали выгодное географическое положение, и здесь возник ранний и обширный новгородский посад. Судя по названию, основу его населения составляли плотники, которые требовались как для строительства часто горевших боярских усадеб, так и для постройки торговых и боевых судов купеческого города.
Сага сообщает о наборе воинов со всего княжества:
«Ярицлейв конунг послал боевую стрелу по всему своему княжеству, и созывают конунги всю рать». (2, 109)
Судя по совету опередить Святополка в сборе войска, созыв воинов был поспешным.
Людин и Неревский концы вместе с подвластными им землями Новгородчины выставили по 1000 воинов, третью тысячу набрали из оставшихся жителей Славенского конца, дополнив их добровольцами из Плотников и иных посадов. Боярское ополчение Людина и Неревского концов по знатности и боевому опыту стояло вровень с боярским ополчением Святополка. Иное дело — простолюдины из Плотников. Необычность для того времени формирования войска за счёт народного ополчения привлекла внимание киевского боярина, который воспринял это деяние Ярослава как попрание традиций.
Главные военные ресурсы страны были сосредоточены в районе южной оборонительной линии. Так, под Переяславлем численность армии Бориса насчитывала 8000 человек. В заграничный поход в Византию Владимир Святой водил 10 000 воинов. Святополк мог собрать под свои знамёна значительно большее войско, нежели то, что выступило из Новгорода.
Расположение войск под Любечем в Радзивиловской летописи определено так:
«Слышав Святополк идуща Ярослава, и пристрои бес числа вои, Русь и печенег, и изыде противу ему к Любичу обонпол Днепра, а Ярослав об сюду». (16, 62)
Это означает, что войска киевлян стояли на левом берегу Днепра, новгородцев — на правой, киевской, стороне реки. Но в статье следующего года находим противоположное утверждение:
«Приде Ярослав и ста противу обапол Днепра, и не смеяху ни ти на сих, ни си на них, и стояша за 3 месяца и противу собе». (16, 62)
Известия дублируются из-за соединения летописных статей с весенним и осенним счётом лет, из чего следует, что войско новгородцев достигло Любеча после 1 сентября 1017 года. У Татищева войска киевлян размещены на правом берегу, а новгородцев - на левом:
«Слышав Святополк идуща Ярослава и пристрои бес числа вои, русь и печенег, и изыде противу ему к Любичю по сю сторону Днепра, а Ярослав от онуду.
6524 (1016). Прииде Ярослав и ста об он пол Днепра, и не смеяху ити на сих, ни сии на оных. И стояху за 3 месяца противу себе, не смеяху бо соступиться». (21, 144)
Выражения «от онуду», «об он пол» обозначают противоположный берег. Последующие переписчики летописей стали воспринимать выражение «об он пол» как указание на противоположность берегов, занятых двумя враждебными армиями.
Инициатива в борьбе за великокняжескую власть была на стороне Ярослава. Святополк выступил в поход, только получив известие о приближении новгородцев. В районе боевых действий на левом берегу стоял укреплённый город Любеч. На правом берегу укреплённых поселений не было. Подошедший первым Ярослав занял Любеч и под прикрытием его стен противостоял Святополку. Святополк же выставил заслон на пути из Любеча в Киев, на правом берегу реки.
Мы получаем непротиворечивую картину. В ином случае имелась бы довольно странная ситуация, при которой в борьбе за Киев Святополк ушёл бы за Днепр, а Ярослав, имея свободную дорогу к столице, зачем-то пытался атаковать стоящие в стороне войска, вместо того чтобы выставить заслон и двигаться к лишённому войск городу.
В первом летописном сообщении основным географическим ориентиром выступает Любеч, к которому подошёл Ярослав. Поэтому летописец расположение войск дал относительно этого города. Подошедшие киевляне стали на противоположном городу берегу, а новгородцы находились на стороне Любеча. Во втором случае Любеч не упоминается и расположение войск дано относительно Киева, главного географического ориентира всего региона. Информатор Татищева выправил географические указания, приведя их все относительно Киева.
Перед походом Ярослав располагал только возможностями Новгородского княжества. Он мог попытаться воспользоваться внезапностью и выбить Святополка из Киева, пока тот не успел собрать большое войско, но предпочёл поступить более осмотрительно. Захватом Любеча Ярослав отрезал от Киева Черниговское и Ростовское княжества. Сковав основные силы киевлян на правом берегу Днепра, новгородцы получили возможность в своём тылу, где уговорами, а где и силой, приводить к покорности восточные и северо-восточные земли.
Владимир Святой ущемил права двух старших сыновей в пользу сыновей от болгарыни Марии. Святополк стал исправлять эту несправедливость истреблением соперников. Ярослав отличался более миролюбивым характером. Во время противостояния под Любечем этот предусмотрительный и осторожный политик стал укреплять свои позиции за счёт присоединения возможно большего количества земель.
Первым захвату подверглось Черниговское княжество, на земле которого стоял Любеч. Ростовское княжество лежало между Новгородским и Черниговским княжествами и также должно было стать объектом притязаний Ярослава. За пять лет до этих событий Ярослав был ростовским князем, хорошо знал местную знать и мог рассчитывать на поддержку какой-то её части. Глеб был изгнан из Ростова Святополком, а затем город перешёл под власть Ярослава.
При описании войны Ярослава со Святополком летописцы ничего не сообщают о младших Владимировичах. Они, похоже, сохраняли нейтралитет во время схватки старших братьев, и под контролем Святополка и Ярослава оказались примерно равные территории.
Под Любечем для Ярослава ситуация кардинально поменялась в лучшую сторону. Теперь всё зависело от того, кто быстрее успеет собрать больше сил и средств. Медлительность в войне со Святополком следует объяснить как раз собиранием воинов и средств для их содержания. В саге силы противников оцениваются как примерно равные. (2, 109) Только сравнявшись по военной мощи с армией Святополка, осторожный Ярослав решился на битву.
Южные летописцы знали, что победу одержало войско северян, численностью гораздо более 4000 человек, но точных данных не имели. Под пером одного летописца новгородское войско увеличилось на порядок, достигнув 40 000 воинов, другой увеличил на порядок численность одних лишь новгородцев, исчислив всю армию в 30 000 человек.
Военные предприятия были дорогостоящими. Святополк, зная о численности новгородцев, несмотря на спешку, должен был выставить против них равную по силам или несколько большую армию. Среди войск южной пограничной линии после гибели Бориса царил разброд. Собрать их воедино в короткий срок было непростой задачей. Имея решающий перевес в силах, любая из сторон атаковала бы противника. Но армии замерли в трёхмесячном ожидании. Дальнейшему росту численности войск Ярослава Святополк должен был противопоставить дополнительный набор. Но вряд ли численность каждой из противоборствующих армий к моменту решающей схватки превышала 10 000 воинов.