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

Если обратиться к репозиторию популярного проекта, от которого сегодня зависят команды разработчиков по всему миру, можно увидеть кодовую базу с тысячами файлов и миллионами строк кода, включая сложные архитектурные паттерны. Изучить фундаментальные концепции известного общедоступного проекта, глядя лишь на его текущее состояние, практически невозможно. Анализ же ранних версий кодовой базы любого проекта однозначно дает лучшее понимание как его фундаментальных идей, так и причин последующего головокружительного успеха.

В этой статье рассмотрим несколько ранних версий популярных общедоступных проектов, чтобы раскрыть интересные аспекты их развития. То, как изначально начинался их путь, может вас удивить!

Atom Shell превратился в Electron, выйдя из редактора кода

Многофункциональный фреймворк Electron доминирует сегодня в индустрии кроссплатформенной разработки десктопных приложений, позволяя создавать нативные приложения с помощью JavaScript, HTML и CSS. Однако Electron начинал свой путь не как отдельный общедоступный проект общего назначения — изначально он был ключевым компонентом некогда популярного редактора кода Atom и был известен как Atom Shell:

Ранняя версия редактора кода Atom (скриншот старой версии официального сайта Atom из сервиса Wayback Machine)

Сооснователь GitHub Крис Ванстрат инициировал проект редактора кода Atom, использовав класс Cocoa WebView и HTML-интерфейс, написанный на CoffeeScript. Позже Atom стал кроссплатформенным приложением с использованием фреймворка Chromium Embedded Framework (CEF). Ченг Чжао создал проект Atom Shell, чтобы отделить нативную часть редактора Atom от основной кодовой базы редактора:

Самая ранняя реализация нативного окна Electron (скриншот первоначального экспериментального исходного кода Atom Shell)

В 2015 году команда разработчиков Atom Shell переименовала проект в Electron. Впоследствии Electron превратился в универсальный фреймворк для разработки десктопных приложений, включив в себя все базовые API для кроссплатформенной разработки, такие как нативное меню, системный трей, API управления состоянием окон и другие, которые изначально были созданы для редактора Atom.

Python создавался как простой язык, объединяющий возможности shell-скриптов и C

Python входит в число самых популярных универсальных языков программирования. 

Экосистема разработки на Python достаточно эффективна для создания чего угодно, чтобы конкурировать со всеми другими популярными языками. Однако Гвидо ван Россум начинал проект интерпретатора CPython в 1990 году не как полнофункциональный универсальный язык — изначально Python разрабатывался как простой язык для быстрого прототипирования и автоматизации, сочетающий возможности shell-языков и C:

Первый официальный туториал Python представляет язык как простой язык, заполняющий нишу между C и shell-языком (скриншот ранней версии туториала CPython, написанного с использованием LaTeX

Вот ранняя версия реализации виртуальной машины Python:

Обработка выполнения операционного кода BUILD_LIST в самой ранней, экспериментальной, кодовой базе CPython, 1990 год

Python стал первой практической реализацией языка, которая предложила производительность, сравнимую со скриптовыми языками, и возможности взаимодействия с системой на уровне C для создания быстрых программ. Невероятно дружелюбный синтаксис Python стал основной причиной, которая помогла языку выйти за рамки простой автоматизации и прототипирования и превратиться в самый популярный в мире универсальный язык общего назначения.

Первая версия Git была удивительно простой (и с юмором)

Сегодня все мы используем Git для управления версиями исходного кода, чаще всего в сочетании с такими платформами, как GitHub. Git бесспорно является самым популярным и многофункциональным инструментом контроля версий, который используют команды разработчиков по всему миру. Но задумывались ли вы о происхождении названия «Git»? Насколько сложным был этот проект изначально? Создавался ли он как полнофункциональный инструмент для широкого круга пользователей?

Линус Торвальдс создал Git для управления кодом ядра Linux, столкнувшись с проблемами в работе существовавшей тогда системы контроля версий BitKeeper. Хотя «Git» может показаться акронимом, на самом деле это было просто спонтанно выбранное название проекта. Если мы обратимся к первому коммиту в истории Git, то обнаружим, с каким юмором Линус Торвальдс представил свою разработку:

Первоначальная документация Git с юмористическим описанием проекта (скриншот первой версии файла README в кодовой базе Git)

Первый снимок состояния кодовой базы Git содержал всего девять исходных файлов на C с небольшим количеством строк кода, что позволяет любому программисту легко изучить его основные дизайн-концепции:

Первый коммит в Git от Линуса Торвальдса (скриншот самого раннего доступного снимка исходного кода Git-проекта на GitHub)

На сегодняшний день кодовая база усложнилась и насчитывает более 500 исходных файлов на C, а также включает комплексную тестовую среду, состоящую примерно из тысячи shell-скриптов.

Mocha из Netscape Navigator превратился в JavaScript

Сегодня JavaScript повсюду, на нем можно создать практически что угодно. С точки зрения универсальности, только Python может составить ему конкуренцию. Однако JavaScript начинал свой путь не как универсальный язык программирования — он был добавлен в некогда популярный браузер Netscape Navigator в качестве простого скриптового языка, чтобы сделать статические веб-страницы немного динамичнее на стороне клиента.

В наше время существуют сложные высокопроизводительные JavaScript-движки с JIT-компиляцией, но первая версия JavaScript, известная как Mocha и разработанная Бренданом Айком, состояла всего из нескольких исходных файлов на C и содержала базовую виртуальную машину и основные возможности языка:

Фрагмент первоначальной реализации Mocha (JavaScript) (скриншот кода из сохраненного репозитория mocha1995 на GitHub)

Первый доступный снимок кода Mocha содержал фундаментальные элементы, на которых до сих пор основывается современный JavaScript, такие как встроенные объекты для работы с массивами, датами, математическими операциями, строками, булевыми значениями и числами:

Реализация встроенного строкового объекта в Mocha экспортирует несколько методов, которые JavaScript использует до сих пор (скриншот кода из репозитория mocha1995 на GitHub)

PHP изначально не был языком программирования, но позже стал им

В начале 2000-х годов, до популяризации одностраничных приложений (SPA), PHP был доминирующим языком для создания веб-приложений и динамических сайтов. До сих пор PHP остается популярным выбором для создания веб-сайтов благодаря распространению конструкторов типа WordPress, Joomla и Drupal. Улучшения в области ООП сделали PHP более популярным и помогли ему выжить в современной индустрии программирования, создав универсальную экосистему. С помощью современного PHP можно создавать веб-решения, CLI-программы, кроссплатформенные мобильные приложения (NativePHP) и даже настольные приложения (PHP-GTK).

На ранних этапах PHP был просто встроенным в HTML скриптовым языком, никто не планировал делать из него универсальный язык программирования. Расмус Лердорф изначально создал первую версию PHP как набор простых CGI-программ для своей персональной домашней страницы. Самая ранняя известная кодовая база PHP описывает проект как Personal Home Page Tools (инструментарий для персональной домашней страницы):

Снимок кодовой базы PHP 1.0 описывает проект как «Инструментарий для персональной домашней страницы» (Personal Home Page Tools), также известный как «PHP Tools» (скриншот из сохраненного репозитория  php1 на GitHub)

Первый PHP представлял собой простой язык шаблонов для динамической генерации HTML, а также имел базовую поддержку форм через метод POST:

Различные шаблоны в реализации PHP 1.0 (скриншот из сохраненного репозитория на GitHub)

Современная кодовая база PHP (исходный код движка Zend) представляет собой сложный код на C с многочисленными объемными исходными файлами и сложными grammar-файлами на основе Yacc/GNU Bison.

Заключение

Мы рассмотрели прошлые версии популярных общедоступных проектов, которые помогают современным разработчикам создавать цифровые продукты. Все эти проекты сегодня обладают сложными кодовыми базами с тысячами исходных файлов, но изначально начинали свой путь как простые экспериментальные разработки с минимальным количеством кода. На начальных этапах разработки создатели этих проектов не предполагали, что будущее индустрии программного обеспечения будет зависеть от их инноваций. Та же история характерна для большинства других популярных проектов с открытым исходным кодом, включая ядро Linux, Docker и другие.

Изучение внутреннего устройства и основных концепций сложных популярных проектов происходит гораздо эффективнее при анализе их ранних версий.

Сравнение самых первых и текущих версий вышеупомянутых проектов может мотивировать вас экспериментировать, создавать инновационные и собственные проекты с открытым исходным кодом— простой прототип, написанный за несколько часов, может вырасти в масштабный проект и стать основой для следующей технологической эпохи!

Изучение кодовых баз публично доступных проектов — отличный способ освоить лучшие архитектурные паттерны и повысить свой уровень программирования. 

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Shalitha Suranga: Past Snapshots of Popular Codebases That You Didn’t See

Предыдущая статьяУпростите поиск ресторанов в React-приложении с помощью foodie-react
Следующая статьяПогружение в JavaScript