Вот уже два года наша компания занимается разработкой опенсорсных проектов. В мае 2011 года был зарегистрирован наш аккаунт на GitHub. О некоторых из размещенных там под свободными лицензиями продуктах мы уже писали, но это было давно — имеющиеся публикации датируются всё тем же 2011 годом. За прошедшее с тех пор время мы реализовали и выложили в свободный доступ много интересных и полезных проектов (общее число созданных нами репозиториев составляет около трех десятков), и о некоторых из них стоит рассказать более подробно.
Почему Open Source?
На первый взгляд коммерческие компании и OpenSource кажутся вещами совершенно несовместимыми. Большинство коммерческих продуктов выпускается с закрытым исходным кодом и распространяются исключительно платно.
Однако в последние 10–15 лет очевидной стала следующая тенденция: опенсорсные наработки активно используются в коммерческих проектах. И практика показывает, что качество, например, некоторых свободно распространяемых библиотек не хуже, а в некоторых случаях — даже лучше по сравнению с качеством аналогичных коммерческих продуктов. Кроме того, многие опенсорсные продукты обладают более широким набором функций по сравнению с коммерческими аналогами.
Начиная разговор об OpenSource, следует прояснить разницу между понятиями “бесплатное ПО”, “свободное ПО” и “открытое ПО”. Хотя все три перечисленных типа ПО имеют общие черты, между ними есть ряд существенных отличий. Открытое ПО не является синонимом бесплатного: существует немало программ с открытым исходным кодом, распространяемое, тем не менее, на коммерческих условиях (в качестве примера можно привести коммерческие Linux-системы). В свою очередь, существует немало программ, которые распространяются совершенно бесплатно, но их исходный код при этом закрыт. Для бесплатных программ могут также быть установлены ограничения на копирование и распространение; их исходный код очень часто бывает закрыт.
Свободное, или опенсорсное ПО в строгом смысле распространяется с открытым исходным кодом под так называемыми свободными лицензиями, подразумевающими, что оно может распространяться, копироваться и подвергаться изменениям (под изменением подразумевается модификация программного кода). Свобода лицензий, однако, не является синонимом анархии. Принятие условий свободной лицензии налагает на пользователя некоторые обязанности. Некоторые лицензии, например, предполагают обязательную публикацию исходного кода после любого внесения изменений. Существуют также лицензии, имеющие сугубо некоммерческий характер: при использовании хотя бы одной библиотеки, опубликованной под такой лицензией, необходимо открывать код всего продукта.
Свободное ПО при этом далеко не всегда распространяется совершенно бесплатно; существуют различные варианты монетизации опенсорсных проектов. Например, весьма популярной является схема, известная под названием donateware: пользователи могут поддержать разработчиков посильными добровольными пожертованиями. Некоторые программы выпускаются бесплатно, но имеют еще и платную версию, для которой обеспечиваются специальное сопровождение и дополнительные гарантии. Бывают также продукты, распространяемые бесплатно, но за их техническую поддержку при этом нужно платить.
Негласное правило сообщества OpenSource предполагает, что нужно не только брать, но и давать что-то взамен: воспользовался продуктом — постарайся улучшить его. Свободное программное обеспечение как раз развивается благодаря тому, что миллионы пользователей (как любителей, так и профессионалов), — дополняют и совершенствуют продукты, с которыми они работают. Желание усовершенствовать используемые нами свободно распространяемые библиотеки и поделиться своими наработками с коллегами стало одним из мотивов, побудивших нас открывать собственные продукты на GitHub. Но этот мотив был далеко не единственным.
В сообществе разработчиков открытого ПО (как и в любом сетевом сообществе, объединяющем людей со схожими интересами) все участники так или иначе следят за разработками друг друга. Авторы интересных решений могут получить известность в кругах профессионалов. А коммерческим компаниям участие в опенсорсных проектах дает неплохую возможность повысить собственную узнаваемость. Благодаря GitHub у нас появилось некоторое количество клиентов; поправки и улучшения, внесенные в наши продукты пользователями, мы активно используем в своей работе. Размещая собственные проекты на GitHub, мы делимся знаниями с широкой пользовательской аудиторией, популяризуем наши подходы и идеи. Таким образом, Open Source в определенном смысле является для нас и средством продвижения.
Проекты, которые мы размещаем в свободный доступ, мы изначально реализовывали для решения собственных задач. При этом эти проекты обладают большим потенциалом, который мог бы быть востребован многими пользователями — именно поэтому мы и предлагаем их широкой аудитории. Собственные разработки мы публикуем исключительно на бесплатной основе.
Pyte
Первый проект, выложенный нами на GitHub. Мы используем его для показа консолей виртуальных машин в облаке. Все начиналось с небольшой библиотеки samfoo/vt102, которая впоследствии была переписана полностью. Подробная статья об этом проекте была опубликована два года назад.
Pyxs
Написанный на Python клиент для работы с XenStore — хранилищем, используемым для обмена информацией между доменами Xen. Отличается более удобным (по сравнению с libxs) интерфейсом, а также многопоточной подпиской на события. Краткая, но информативная статья о Pyxs уже была опубликована ранее.
Supload
Утилита на Bash для загрузки файлов в наше облачное хранилище, использующая OpenStack Swift API. Для работы требует минимум зависимостей и сторонних программ. С ее помощью можно загружать файлы в хранилище, осуществлять рекурсивную загрузку файлов в указанной папке и подпапках, загружать новые файлы, настраивать автоудаление файлов. Утилита используется также для организации резервного копирования в хранилище.
Tempo
Библиотека для парсинга и форматирования времени на Erlang. Изначально она разрабатывалась для нашего сервиса мониторинга, чтобы реализовать в нем операцию преобразования времени из внутренних структур Erlang в строки.
Alberto
В Erlang существует механизм «портов», предназначенный для взаимодействия между программой на Erlang и любой другой программой через stdin/stdout с передачей сообщений в установленном формате. Alberto — это библиотека для создания таких “портов”, написанная на OCaml.
Pat
Мы искали стабильную библиотеку на Erlang, поддерживающую протокол SMTP — и не нашли ничего подходящего. Есть, конечно, gen_smtp, которая, к сожалению, стабильностью не отличается. Поэтому мы задумались собственном решении.
Hen
Библиотека на Haskell, реализующая интерфейс к гипервизору Xen, работает как с третьей, так и с четвёртой версией.
YAML Config
Когда мы начали писать первые программы на Haskell, перед нами встала необходимость их конфигурирования. Из распространенных библиотек для этой цели прежде всего используется configurator. Она имеет два существенных недостатка. Во-первых, она не поддерживает хранение списков объектов. Во-вторых, для используемого ей формата файлов нет библиотек на других языках.
Мы решили написать собственную библиотеку, выбрав в качества формата YAML. К преимуществам этого формата следует отнести гибкость и простоту синтаксиса, а также поддержку всеми распространенными языками программирования.
Репозиторий YAML Config на GitHub
Photo Gallery
Приложение на CoffeeScript, позволяющее пользователям нашего облачного хранилища просматриваеть графические файлы в виде фотогалереи как на стационарных, так и на мобильных устройствах . Статья об этом уже была опубликована в нашем блоге. Функциональность фотогалереи основана на базовых возможностях хранилища, и это позволяет дорабатывать клиентскую часть под различные специфические нужды самостоятельно.
Репозиторий Photo Gallery на GitHub
Заключение
В этой статье мы рассказали о некоторых наших опенсорсных проектах за последние два года. Работа в этом направлении продолжается; о ее результатах мы еще расскажем в следующих публикациях.
Мы рассказали далеко не обо всех проектах. Заинтересованных читателей приглашаем посетить нашу страницу на Github — возможно, вы найдете там что-то полезное для себя. Будем признательны за все замечания, предложения и пожелания — они будут обязательно учтены в дальнейшей работе.
Для тех кто не может комментировать посты на Хабре, приглашаем к нам в блог.
Автор: AndreiYemelianov