История происхождения Git

0
922
views

Перевод статьи «A Git Origin Story».

Как родился Git

Изначально Линус Торвальдс не использовал вообще никакой системы контроля версий. Люди, принимавшие участие в разработке ядра Linux, сначала должны были постить свои патчи в группе Usenet, а позже – отправлять по email. Все эти изменения Линус лично применял в своем дереве исходного кода. В итоге он выпускал новый релиз со всем этим деревом, без всякого разделения на какие-либо патчи. Единственным способом проследить историю этого процесса было изучение гигантского diff между двумя полными релизами.

Эта ситуация не была обусловлена отсутствием систем контроля версий в принципе. CVS существовала еще с 1980-х и по-прежнему была самой популярной из такого рода систем. Она позволяла контрибуторам отправлять патчи в центральный репозиторий и изучать историю патчей в этом репозитории.

Но на CVS было много жалоб. Одной из проблем было то, что CVS отслеживала изменения «пофайлово» и не воспринимала более обширные патчи в качестве отдельной единой ревизии. Из-за этого разработчикам было тяжело отслеживать предыдущие изменения. Также в CVS были баги, которые было сложно исправить, например, состояние гонки, когда одновременно отправлялись два конфликтующих патча.

Линусу не нравилась CVS. Частично по причинам, которые озвучивали другие люди, частично по собственным, которые стали понятны гораздо позже. Также ему не нравился Subversion – open-source проект, всплывший в 2000-х. Его целью было заменить CVS, исправив баги и недостатки последней.

BitKeeper

BitKeeper

Отсутствие подходящей системы контроля версий сильно огорчало многих разработчиков ядра Linux. Поэтому существенная часть сообщества давила на Линуса, побуждая его выбрать какой-то один из доступных вариантов. И вот, в 2002 году, выбор был сделан. К всеобщему ужасу и шоку, Линус выбрал BitKeeper – коммерческую систему с закрытым исходным кодом, разрабатываемую компанией BitMover под руководством Ларри МакВоя.

Ядро Linux было самым важным open-source проектом в истории. Линус Торвальдс был человеком, впервые открывшим подходы к open-source разработке, которые будут применяться в open-source проектах целыми десятилетиями, вплоть до сегодняшнего дня. О чем он только думал? Как он мог предать свое сообщество и мир открытого исходного кода? Именно эти мысли приходили в голову многим людям, когда Линус впервые начал использовать BitKeeper в разработке ядра.

Кроме того, BitMover в обмен на бесплатную лицензию установила существенные ограничения для Linux-сообщества. Во-первых, разработчикам не разрешалось использовать BitKeeper и при этом заниматься работой над системами контроля версий, которые могли бы стать конкурентами BitKeeper. А во-вторых, BitMover контролировала определенные метаданные, относящиеся к проекту ядра, чтобы отслеживать любые нарушения лицензии. Без доступа к этим метаданным разработчики не могли сравнивать прошлые версии ядер, а это было важным и уже стандартным функционалом других систем контроля версий.

Споры не утихали, но Торвальдс продолжал полагаться на BitKeeper в течение нескольких лет. Основным аргументом Линуса было то, что он не является фанатиком свободного программного обеспечения. Он будет использовать инструменты с открытым кодом, если они будут лучше своих коммерческих конкурентов. Но если лучшим окажется коммерческий инструмент, Линус не будет от него отворачиваться.

Линус Торвальдс
Автор: Unknown photographer who sold rights to the picture to linuxmag.com — Linuxmag.com; The image is from an article in a December 2002 issue of Linux Magazine[1], CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=17991

А вот многие разработчики ядра как раз были самыми настоящими фанатиками свободного ПО. Между Линусом и остальными разработчиками возникло напряжение, хотя и не настолько сильное, чтобы привести к разделению сообщества и созданию настоящего форка проекта по разработке ядра Linux. Безусловно, такие люди как Алан Кокс, Ал Виро, Дэвид Миллер, Андреа Арканджели, Эндрю Мортон и внушительное число других разработчиков обладали достаточными техническими навыками для создания конкурирующего проекта. И возможно, кто-то из них даже мог бы увлечь за собой значительное количество разработчиков ядра. Но никто этого не сделал. Сохранялись напряжение и враждебность.

Чем же был хорош BitKeeper?

Самым главным в BitKeeper была распределенная система, при помощи которой можно было с легкостью делать форки и мержить целые репозитории. Это было ключевое отличие системы. Теперь разработчики ядра могли сотрудничать внутри своей подгруппы, пользуясь всеми преимуществами контроля версий, а затем передавать свои уже готовые изменения Линусу. Таким образом, значительная часть работы, прежде лежавшая на плечах Линуса, распределялась между доверенными помощниками или даже членами любой группы. Архитектура, драйвера и подсистемы могли разрабатываться в некоторой степени независимо друг от друга, а затем одним большим «глотком» вливаться в главное дерево ядра.

Все это может звучать очень привычно, но в 2002 году это было новинкой. Существовавшие ранее проекты, например CVS и Subversion, могли делать форки и слияния, но это были действия, требующие большого количества времени. А с BitKeeper все это стало тривиальными операциями.

Поиск альтернатив

Желание Линуса использовать несвободное ПО в самом сердце разработки ядра вдохновило многих людей на попытки создать альтернативу. CVS и Subversion не подходили на эту роль, поскольку отставали от BitKeeper, а кроме того имели фундаментальные ошибки в дизайне. То же касалось и других существовавших тогда проектов. Но поскольку все знали (или думал, что знали), чего хочет Линус, они могли подойти к делу со всей серьезностью. Результатом стала целая череда систем контроля версий, предлагавших распределенную разработку.

darcs - альтернатива BitKeeper
Автор: Изначально это изображение было загружено пользователем JohnyDog, а затем перенесено в Викихранилище пользователем IngerAlHaosului при помощи CommonsHelper., GPL, https://commons.wikimedia.org/w/index.php?curid=8988382

Среди них были arch, darcs и monotone. Используя BitKeeper в качестве образца, каждый из проектов пытался представить Линусу свой вариант альтернативы этому несвободному ПО.

Попыток было много, и все неудачные. Частично эти неудачи были обусловлены тем, что Линус никогда четко не высказывался насчет того, чего он ждет от всех этих проектов. Точно так же он никогда не говорил, чего ему не хватает в CVS и Subversion. К тому же ощущалось, что Линус вообще не переживает из-за использования инструмента с закрытым исходным кодом, а значит, любая предложенная альтернатива должна была существенно превосходить BitKeeper. В общем, никакой open-source инструмент контроля версий не был достаточно хорош до появления BitKeeper, а после его появления планка поднялась еще выше.

Разрыв с BitKeeper

Спустя три года напряженных усилий ни одна open-source альтернатива не приблизилась к удовлетворению нужд Линуса ближе, чем CVS или Subversion. Такое положение вещей могло бы сохраняться еще долго, если бы не Эндрю Тридгелл, создатель Samba, участник создания rsync и вообще прекрасный парень.

В 2005 году Эндрю попытался воспроизвести сетевые протоколы BitKeeper для создания свободной альтернативы этого ПО. Причем даже если бы он этого не делал, это сделал бы кто-нибудь другой, это было просто делом времени.

Ларри МакВой
By Eugene Zelenko — Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=18983524

Ларри МакВой предупреждал разработчиков Linux, что он им перекроет кислород, если кто-нибудь попытается сделать нечто подобное, и так он и поступил. Внезапно оказалось, что BitKeeper уже не может использоваться при разработке ядра. Вся цепочка инструментов разработки вертелась вокруг распределенной системы контроля версий, а теперь все это повисло в неопределенности.

Что это означало? Вернется ли Торвальдс к старой схеме разработки, лично принимая все патчи? Если нет, то будет ли выбран один из альтернативных вариантов с открытым кодом? И если да, то какой из них?

Рождение Git

И тут случилось нечто выдающееся. Впервые с 1991 года Линус занялся чем-то помимо ядра Linux. Поскольку ни один из существовавших инструментов его не удовлетворял, он решил написать собственный.

Одной из приоритетных для Линуса вещей была скорость. Он никогда не говорил об этом, по крайней мере, не так внятно, чтобы кто-нибудь из разработчиков СКВ сделал на этом упор.

Поскольку разработчики ядра по всему миру полным ходом присылали свои патчи, Линусу нужно было что-то с невообразимой до тех пор скоростью. Он не мог позволить ожидание в несколько секунд даже для окончания самых больших и сложных операций. А ни arch, ни darcs, ни monotone, ни еще какой-нибудь проект даже и близко не удовлетворяли этому требованию.

Линус недолго пописал код в уединении, а затем представил миру свою новую концепцию. За несколько дней от начала проекта в июне 2005 года система контроля версий git стала полностью самостоятельной. Через несколько недель она уже была готова к размещению разработки ядра Linux. Через пару месяцев система стала полностью функциональной. На этом этапе Линус передал поддержку проекта его главному контрибутору-энтузиасту Джунио Хамано, а сам вновь вернулся к разработке Linux.

Потрясенное сообщество разработчиков свободного ПО изо всех сил пыталось разобраться в этом странном творении. Оно не походило ни на какие другие системы контроля версий. Фактически, оно скорее напоминало низкоуровневую файловую систему, чем СКВ.

Вместо того чтобы хранить патчи, как другие системы, Git сохранял полные версии каждого измененного файла. И что в этом хорошего? А с другой стороны, он мог молниеносно обрабатывать форки и слияния, а также быстро генерировать патчи при необходимости.

Постепенно Джунио собрал набор команд более высокого уровня, которые больше походили на команды таких инструментов как CVS и Subversion. И если первоначальный набор команд git был скорее «канализацией», то новый можно было считать «фарфором». Так их и назвали. (Канализация – plumbing, фарфор – porcelain. Под «фарфором» понимаются фарфоровые унитазы и раковины, т. е., то, с чем больше соприкасается человек, вещи более высокого уровня, чем канализационные трубы. – прим. перев.).

Новая система контроля версий вызвала энтузиазм, соразмерный спорам и негодованию по поводу BitKeeper. Повсюду появлялись новые порты, расширения и сайты. Через несколько лет git пользовались уже практически все. Как и Linux, он захватил весь мир.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here