Об Open Source. Часть II.

Продолжаем увлекательное погружение в мир Open Source, которое мы начали на прошлой неделе (https://medium.com/@allo/%D0%BE%D0%B1-open-source-%D1%87%D0%B0%D1%81%D1%82%D1%8C-i-b7217d4c9109). В прошлый раз у нас была картинка с собором, в этот раз — с базаром.

Для тех, кто не понял — это намёк на программную для сообщества Open Source статью одного из идеологов этого движения, Эрика Реймонда. Где он сравнивает традиционную модель разработки софта с “собором”, где всё строго и по правилам, а Open Source — с “базаром”, где всё хаотично, но из этого хаоса сам собой рождается порядок.

Статья в своё время вызвала много споров. И это вообще свойственно для сообщества Open Source, где до сих пор не утихают споры между сторонниками “Open Source” и “Free Software”. Разобраться в этих религиозных спорах остроконечников с тупоконечниками (см. “Приключения Гулливера”) под силу только профессионалам, остальные придумали термин FOSS (Free and Open Source Software) и расслабились. Я в своей заметке для простоты объединяю эти понятия.

Продолжим.

Экосистема Open Source

Одна из основных причин успеха Open Source — огромное количество энтузиастов, которые его развивают не потому, что злой начальник стоит над душой и пугает дедлайнами, а потому, что их просто прёт от этого и им интересно этим заниматься (just for fun!). В интеллектуальном и креативном труде (а программирование — это как раз такой труд), мотивация и вдохновение — самое главное.

Правда, это же является и минусом Open Source. Так как вдохновение вполне может и пройти. И тогда проект окажется заброшенным. Но тут помогает как раз эволюционная природа проектов. Кто-то бросил, потеряв мотивацию, а кто-то её обрёл и присоединился. Впрочем, многие проекты и умирают. Точно так же, как в процессе эволюции одни животные и растения вытеснили других.

Сейчас уже огромное количество корпораций спонсирует проекты Open Source и разработчики получают зарплату за то, что создают такие проекты. Примеров — множество. Facebook, Google, Microsoft выкладывают свои проекты в Open Source. Уже есть несколько больших некоммерческих организаций, живущих на спонсорские взносы корпораций и управляющие Open Source проектами. Это и Apache Foundation, и Linux Foundation, и Cloud Native Computing Foundation, и Eclipse Foundation.

Зачем корпорации это делают? Не только из благотворительности. Во-первых, это позволяет привлечь интерес к своим проектам, во-вторых, энтузиасты подключаются к проектам и начинают их развивать, добавляют интересные идеи (которые не всегда могут родиться в корпорациях), в-третьих, это развивает экосистему вокруг этих продуктов и тому же Facebook становится проще нанимать разработчиков, которые уже оказываются знакомыми со всеми используемыми этой компанией продуктами. Ну а в-четвёртых — это здорово мотивирует разработчиков, разрабатывающих эти продукты. Так как их ценность на рынке здорово повышается вместе с растущей популярностью Open Source продукта, который они разрабатывали “под крылом” большой компании. И разработчики начинают стремиться туда, где делают Open Source. Много больших проектов в этом мире выросло из университетов. Open Source — хороший способ студентам быть интегрированными в индустрию.

Есть, кстати, очень классные примеры Open Source проектов мирового уровня и из России. Начну с самого знаменитого — nginx. Игорь Сысоев написал его, будучи администратором серверов в Рамблере. Уже давно nginx — самостоятельная компания, а на этом веб-сервере работает треть глобального интернета, включая самые большие сайты (https://news.netcraft.com/archives/2018/11/26/november-2018-web-server-survey.html).

Другой классный пример — JetBrains. Российская компания, которая разрабатывает очень популярные средства разработки. Их IntelliJ IDEA Community Edition отдан в Open Source и Goggle именно на основе него написал свою Android Studio.

Ещё пример от Яндекса. Их супер-быстрая аналитическая база данных ClickHouse очень быстро набирает популярность в мире, так как для определённого класса задач опережает всех конкурентов в сотки раз. А mail.ru выпустил в OpenSource свою in-memory базу данных Tarantool. За исключением IntelliJ IDEA, все проекты выше — это просто внутренние проекты корпораций, которые стали общими.

Иногда это приводит к забавным примерам кросс-опыления. Почитайте историю Cassandra DB, которая была создана Facebook, а сейчас вовсю используется Apple и другими компаниями (https://www.wired.com/2014/08/datastax/). Занятно, что сам Facebook от Cassandra отказался в пользу HBase — Open Source базы, сделанной на основе гугловской базы данных Bigtable.

Особенности и ограничения Open Source

Правда, далеко не всегда это так работает. И тот же Reddit, например, несколько лет назад решил выкладывать исходный код своего портала с некоторой задержкой, так как иначе конкуренты слишком быстро узнавали обо всех готовящихся к запуску возможностях (https://betanews.com/2017/09/04/reddit-open-source-changes/). Amazon тоже весьма осторожен в выкладывании исходного кода (https://www.theregister.co.uk/2014/01/22/amazon_open_source_investigation/). Правда со времён написания этой статьи многое поменялось и Amazon уже всё больше и больше отдаёт в Open Source (https://aws.amazon.com/opensource/). Например, недавно Amazon отдал исходный код Firecracker — свой системы виртуализации для serverless (https://aws.amazon.com/blogs/opensource/firecracker-open-source-secure-fast-microvm-serverless/). Кстати, в данном случае может пригодиться ещё одно преимущество Open Source для платформенных проектов — большая совместимость с расширениями.

Да и вообще можно сказать, что лучше всего Open Source работает с продуктами для профессионалов — разработчиков и инженеров. Именно в этом случае проявляются лучше всего положительные стороны этого подхода. А вот в решениях для конечных пользователей Open Source пока почти незаметен. За исключением Chromium — Open Source движка для браузера, на котором сделаны браузеры Chrome, Opera, Яндекс.Браузер. Скоро даже Microsoft в Edge перейдёт на него.

А вот тот же Android — не совсем честный пример, так как Open Source там — только малая часть. Да и без Google Play (см. экосистемный эффект) Android оказался не столь привлекательным. Многочисленные попытки переписать Microsoft Office тоже кончились ничем (если, конечно, убрать за скобки многочисленных аферистов под знамёнами Open Source, получающих государственные гранты на теме импортозамещения. Вообще у нас в России аферистов от Open Source чаще всего можно найти рядом с государственными деньгами.

Одной интересной особенностью продуктов Open Source является то, что их делают не с целью продать. Это сильно влияет на подход к продуктам. Возьмём для примера базы данных. Коммерческие базы данных пытаются занять как можно большую долю рынка и оправдать высокую цену лицензии. Для этого в продукт запихивается вся мыслимая и немыслимая функциональность, чтобы покупатель не сомневался — он платит не зря.

Первые Open Source базы данных (MySQL и PostgeSQL) следовали этому принципу. Но с тех пор мир ушёл далеко вперёд и теперь открытых баз данных на рынке — великое множество. И каждая заточена под довольно узкую специфическую область. И не пытается быть универсальным инструментом для всех на свете задач. В этом реализуется старый принцип UNIX систем:

— Do One Thing and Do It Well.

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

В результате любой современный софтверный проект — этот мучительный выбор из множества библиотек, продуктов и фреймворков и принятие сложных компромиссных решений между вариантами:

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

А из-за декомпозиции монолитного решения на много-много частных решений, такие решения нужно принимать по отношению к каждому кусочку, в результате чего любой современный проект — это очень сложная (и часто плохоуправляемая) конструкция из множества компонентов, каждый из которых живёт и развивается своей жизнью, обновляется на новые версии, которые оказываются несовместимы между собой. То ещё удовольствие.

Лицензии и Github

Заметка и так затянулась, прошу прощения, но эти феномены Open Source заслуживает маленького упоминания.

Начнём с Github (https://github.com/). Практически все Open Source проекты сейчас лежат на сайте github (недавно купленном Microsoft). Github появился благодаря протоколу git, позволяющему разработчикам со всего мира совместно работать над одним продуктом.

Кстати, git придумал тот же самый Линус Торвальдс, что придумал Linux. Что как минимум косвенно доказывает, что с Linux ему не просто удалось оказаться в нужное время в нужном месте (хотя и это тоже), но и то, что он — талантливый программист.

Github сейчас стал де факто стандартом для Open Source (смотри выше про естественную монополизацию в ИТ).

Сейчас принято говорить, что для программиста его резюме — это его профиль на github, где видны все его собственные проекты и участие в проектах других в Open Source.

Надо отметить, что жизнь Open Source разработчика не всегда так радужна и прекрасна. Об этом очень здорово написал у себя в блоге Nolan Lawsan, почитайте: https://nolanlawson.com/2017/03/05/what-it-feels-like-to-be-an-open-source-maintainer/. Там о постоянной нехватке времени и постоянном же чувстве вины от этого. Это одна из причин, почему далеко не все Open Source проекты живут долго и счастливо.

Второй феномен Open Source — лицензии. Сейчас самыми распространёнными лицензиями, регулирующими права на доступ к исходному коду, являются Apache, GPL и BSD. Особенностью первых является требование предоставлять исходный код всех продуктов, основанных на предоставляемом исходном коде (и это было основанием сравнивать Open Source с раковой опухолью). А лицензия BSD такого ограничения не накладывает. Поэтому Apple и использовала в MacOS UNIX от университета Беркли, воспользовавшись трудом программистов Open Source и ничем не поделившись взамен. Имеют право!

Ещё один интересный феномен сообщества Open Source — его децентрализация, открытость, свобода и, как следствие, слабая управляемость и защита от злоупотреблений этой свободой. Вот лишь пара примеров из недавнего прошлого:

Конечно, это примеры вырожденные, но тем не менее показательные.

Cloud и Open Source

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

Для тех поставщиков софта, которые исходники отдавать заказчикам не хотели, был даже такой вариант договора, как Escrow Agreement (https://en.wikipedia.org/wiki/Source_code_escrow). Исходный код поставщик передавал специальной организации на сохранение, и, если с поставщиком что-то случалось, он поступал в распоряжение заказчика.

Ещё можно порассуждать на тему, что является конечным продуктом в софте — скомпилированное приложение или исходный код. Но это долгий разговор, поэтому вернёмся к облакам. В облаках софт не продаётся, а арендуется. Поэтому исходный код тоже, чаще всего, никому не передаётся. Но при этом большая часть технологий облаков построена на продуктах Open Source. Но далеко не все!

Например, очень популярный PaaS Framework Heroku — не Open Source. А его Open Source альтернатива CloudFare очень далека от совершенства. То же самое можно сказать и про OpenStack, про Serverless технологии и про много чего ещё. Я не удивлюсь, если со временем окажется, что облачные технологии, будучи созданными на основе (и благодаря) Open Source, его же и маргинализируют. Будет интересно посмотреть!

Выводы

В общем, Open Source — точно не панацея, но очень интересный феномен. И та же wikipedia или quora, где силами сообщества создаются просто фантастические хранилища очень полезной информации — лишний тому пример. Я уже давно к почти любому поиску в google добавляю слово “quora” или “wikipedia” и мне уже не приходится среди горы мусорных SEO-шных ссылок выискивать по крупицам полезную информацию.

Люди гораздо более бескорыстны, чем о них принято думать. И open source, crowd-sourcing, crowd-funding и тому подобным вещи, помогающие посредством современных технологий людям делиться с другими людьми, делают наш мир лучше.

Это удивительным образом перекликается с моей заметкой о государстве, которое, на мой взгляд, является ничем иным, как узаконенной формой рэкета (https://medium.com/@allo/%D0%BE-%D0%BA%D1%80%D0%B5%D0%BF%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%BC-%D0%BF%D1%80%D0%B0%D0%B2%D0%B5-%D0%B8-%D0%B8%D1%82-b4b44b3952f). Там мне в комментариях возразили, что, если бы не государство, то некому было бы заботиться о сирых и убогих. Пример Open Source, на мой взгляд, наглядно показывает, что альтруизма в обществе гораздо больше.

И это здорово!