Pull to refresh
VK
Building the Internet

День свободы программного обеспечения

Reading time 13 min
Views 21K


Сегодня особенный день для всех поклонников идей Ричарда Столлмана. Этот человек уже с 1983 года является главным идеологом движения за свободное программное обеспечение. И сегодня отмечается юбилейный, десятый ежегодный день этой самой свободы.

Несмотря на то, что критерии свободного программного обеспечения выглядят довольно дико в условиях повсеместного капитализма, это не помешало появлению и успешному развитию таких всем известных проектов, как GNU/Linux, веб-сервер Apache и движок MediaWiki, на котором работает Wikipedia. И это лишь малая часть, а в целом программ, распространяющихся как свободные, просто несметное количество. Сам я в прошлом являлся ярым сторонником открытого ПО, в частности, все началось c Mandrake Linux, а закончилось Arch Linux и безудержным допиливанием конфигов тайлового оконного менеджера Awesome. В то время даже обратил в оную религию некоторых своих друзей и поставил Линуксы на ноутбуки родителям. Сейчас же ярость поутихла, и я спокойно чувствую себя, сидя за свежей версией Ubuntu. :)

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

У нас в Mail.Ru Group тоже есть немало программистов, участвующих в создании и улучшении свободного программного обеспечения. Буквально в прошлом посте в нашем блоге Александр Емелин рассказал про свой открытый проект Centrifuge. Специально к празднику мы попросили рассказать и других сотрудников о том, как СПО помогает им в работе, и о некоторых своих работах, так что слово авторам.

Владимир Дубровин (@z3apa3a), руководитель группы тестирования Почты Mail.Ru:

Я всю жизнь работаю с опенсорсным ПО, на опенсорсном ПО и под опенсорсным ПО, поэтому «помогло в работе» не подходит к ситуации, я, можно сказать, в нем живу. Сам разрабатываю проект кросс-платформенного прокси-сервера 3proxy — это прокси-сервер, позволяющий управлять прикладным трафиком, то есть учитывать, ограничивать, фильтровать, перенаправлять трафик по различным критериям и прикладным протоколам. Он входит в порты FreeBSD, NetBSD, Fedora, Gentoo, AltLinux. Достаточно долго коммитил в проект FreeRADIUS, аудит исходного кода и отдельные патчи делал для Postfix, Sendmail, Courier-IMAP и некоторых других известных проектов.

Артем Выборнов (@vibornoff), ведущий программист Студии Пушкин:

Я ежедневно пользуюсь СПО в работе. Да, вообще, вся наша инфраструктура на СПО крутится, как же без него? А из проектов у меня есть asmCrypto — криптография для браузеров, работает в разы быстрее похожих библиотек, уже есть крупные внедрения, если немного доработать, получится реализация стандарта W3C Web Crypto API.

Эдуард Искандаров (@toidi), программист группы антиспама:

Open-source — наше все. Мы используем открытый софт во многих местах нашей системы. Начиная с систем обработки и визуализации данных, заканчивая специфичными библиотеками. Я сам являюсь злостным сторонником идеи глобальной кооперации, где успешные идеи и реализации могут получить широкое распространение за счет полезности для общества, а не навязчивого маркетинга. С другой стороны, программные проекты, развиваемые под эгидой open-source очень живучие, что несомненно является огромным плюсом как для сообщества, так и для бизнеса. Если проект действительно интересен, вокруг него возникает сообщество, в котором, в случае необходимости, могут появиться новые лидеры или проект может «отпочковаться», чтобы проверить или развить новые идеи, что тоже хорошо.

Очень важно, что open-source накладывает малые ограничения на возможность использования кода. Начав использовать наработки open-source, ты уже становишься частью сообщества и вносишь потенциальный вклад. Но, другое дело, когда ты становишься активным участником. При чем не обязательно тратить кучу сил и личного времени на разработку своего проекта, начать можно с того, что просто заводить тикеты на недочеты проектов, с которыми сталкиваешься.

Если того требует работа — можно самому попробовать разобраться в исходном коде, а потом отправить наработки в проект. Люди будут тебе благодарны, а навыки программирования прокачаны. К тому же стоит обратить внимание, что работодатели начинают спрашивать профили на популярных сервисах хостинга исходных кодов, и наличие солидного профиля может сделать выбор в вашу пользу. А, возможно, вы организуете бизнес вокруг open-source проекта. К слову, тут огромное поле для действий. Хороших вам пул реквестов.

Дмитрий Коробкин (@Octane), программист проекта Ответы:

Я JavaScript-программист, поэтому чуть ли не ежедневно пользуюсь пакетным менеджером npm, в котором собрано множество open-source модулей. Можно сказать, open-source ПО помогает мне в работе каждый день. Собираю проекты с помощью Grunt, использую UglifyJS для минификации js-файлов, пишу стили на Stylus в связке с nib. Помимо вышеперечисленных, текущий проект, над которым я работаю в Mail.Ru Group, строится на основе следующих open-source решений: Backbone, jQuery, Lo-Dash, LMD, Fest, FileAPI и др.

В npm-копилке присутствует и мой open-source модуль es6-promises – полифил для конструктора Promise из стандарта ECMAScript 6. В отличие от других подобных полифилов, мой реализует только стандартные методы, нет никаких Promise.cast или Promise.any, поэтому, когда все браузеры введут поддержку Promise, полифил можно будет безболезненно удалить, использующий его код переписывать не придется. Полифил может работать как в браузере, так и в качестве Node.js модуля. Асинхронность достигается использованием setImmediate.

Леандр Халиуллов (@khaliullov), программист группы антиспама:

Рассказывать об использовании открытого ПО можно долго, самое простое, начать с того, что, например, используемый мной Perl во многих проектах — open-source, и был портирован на разные платформы. Использованием nginx, httpd Apache тоже никого не удивишь, а ведь многие сайты работают на них. Также я использую разные open-source фреймворки как на фронтендах, так и на бекэендах. В общем, немыслимо, как было бы трудно жить без свободного ПО! Конечно, я пытался и сам помогать каким-либо проектам, но не так чтобы я стал коммитерем, скорее какой-то патч/фичу запилить: udpxy, Icecast, Asuswrt RT-N56U и т.д., везде помаленьку. Своих опенсорных проектов нет, так, пару модулей для перлячки, раньше не придавал этому особого значения, но всё больше понимаю, как это важно и буду стараться следовать принципам открытого ПО.

Последнее, что замутил, — управление EnerGenie EG-PMS-LAN из перлячки Device::Gembird. Если каждый будет стараться внести свой небольшой вклад в то, чем он интересуется, то эти проекты будут развиваться быстрее.

Николай Тимченко (@nickynick), программист мобильных приложений My.Сom:

Я занимаюсь разработкой под iOS. Можно сказать, что еще несколько лет назад культура open-source в этом коммьюнити, как таковая, отсутствовала. Конечно, были некоторые значимые проекты, но не было даже толковых механизмов включения third-party кода в свои проекты — многие разработчики тупо копировали исходники и этим довольствовались. Но потом появился менеджер зависимостей а-ля RubyGems/npm, плюс постепенно переползали разработчики с других платформ, привыкшие к нормальному положению дел, и завертелось.

В своих проектах я использую достаточно большое количество open-source кода, но важно понимать, что каждая следующая подключенная библиотека — это частичная утрата контроля над проектом. К действительно незаменимым можно отнести вещи, связанные со специфическими функциями, например, широко известный ffmpeg или местный GPUImage (библиотека для высокопроизводительной обработки изображений). Еще есть местная реинкарнация Rx, ReactiveCocoa, позволяющая элегантно распутать очень неприятные куски UI кода, связанного с состояниями и реакцией на различные действия пользователя.

В том или ином объеме я контрибьютил в достаточно большое количество проектов, но есть два популярных проекта, в которых я участвую. Это Masonry, удобная обертка над AutoLayout (механизм позиционирования вьюшек на экране), и Mantle — легкий модельный фреймворк, направленный на облегчение жизни и уменьшение количества boilerplate кода. Недавно зарелизил пару собственных проектов, которые в ближайшее время надеюсь довести до состояния production-ready и разрекламировать. Например, ArrayDiff — небольшая штуковина, которая эффективно вычисляет разницу между двумя массивами в виде вставок, удалений и апдейтов.

Марат Радченко (@slonopotamus), ведущий программист студии Allods Team:

На работе возникла следующая ситуация: программисты хотят Git, дизайнеры и художники хотят просто коммитить. Попробовали несколько месяцев пожить на Git'е — не работает. Постоянные проблемы с мержами, приведение working copy в странное состояние, куча негатива и мольбы «верните нам SVN». Гугление показало, что есть стремный проект SubGit, еще есть заброшенный (и люто-бешено тормозящий на питоне) git_svn_server и поддержка svn-протокола на github'е, который они дают только в составе GitHub Enterprise за кучу денег.

Почесав репу, мужики сказали «а ху что, мы ж программисты». И родился git-as-svn, фронтенд к git-репозиторию, делающий вид, что он svn. Фичи: checkout/update, log, blame, commit (!), rename detection, svn:eol-style, git-хуки, аутентификация через LDAP, partial checkout, sparse working copy (svn --depth/--set-depth), git submodules. По бенчмаркам сравним (а местами даже обгоняет) нативный svn. В процессе обнаружили невообразимую феерию в svn'е, которая достойна отдельного поста.

P.S. Да, оно написано на яве, той самой, которая с непредсказуемым GC и любит жрать оперативку. Конечно, лучше бы было на сишечке, но черта с два мы бы тогда нафигачили все это за месяц.

Андрей Кутузов (@dystheist), лингвист Поиска Mail.Ru:

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

Наша группа прикладной лингвистики Поиска Mail.Ru применяет свободное ПО практически во всех задачах. Например, нам была очень нужна качественная утилита для анализа и разбора веб-страниц, снабженных семантической разметкой (RDF, microdata и т.п.). Это нужно для того, чтобы потом использовать эти данные для формирования поисковых сниппетов и других важных вещей. Наш выбор пал на свободную библиотеку any23, развиваемую проектом Apache Software Foundation и, конечно, сообществом. Мы нисколько не пожалели об этом: any23 прекрасно встроилась в наш рабочий процесс. Нам была понятна логика её работы, а в случаях, когда она что-то делала не так, не составило никаких проблем слегка исправить её код. Сейчас при её помощи регулярно обрабатываются миллионы документов, а пользователи поиска получают красивые и информативные сниппеты.

Сам я не считаю себя профессиональным программистом, но если иногда пишу что-то, что может быть полезно для других — всегда выкладываю под свободными лицензиями. Из последних реализованных проектов можно вспомнить систему автоматического разрешения анафоры в русскоязычных текстах. Анафора — это лингвистическое явление, когда слово (обычно местоимение) не имеет значения само по себе, а лишь является указателем на другое слово. Например, во фразе «Динозавр шёл по улице. Петя увидел его и побледнел», слово «его» указывает на динозавра. Определение таких связей важно для многих лингвистических задач. Мы с Максом Ионовым построили систему, которая с неплохой точностью выделяет анафорические связи в произвольном тексте на русском языке. Представили проект на конференции по компьютерной лингвистике «Диалог», сделали некоторые доработки и выложили на github. Сейчас, насколько нам известно, это единственный свободно доступный детектор анафорических связей для русского языка. Можно его попробовать здесь. Будем очень рады комментариям и коммитам. :)

Артем Дроздов (@Artyomcool), руководитель группы разработки Агента Mail.Ru под Android:

Очень сложно назвать «случай». У нас все самые критичные места проекта завязаны на опенсорсные библиотеки. Да и, вообще, Андроид же. Он опенсорсен чуть менее, чем полностью, и это очень часто на руку. Вот неполный список опенсорсных проектов, используемых в работе:

LibPhoneNumber — гугловая библиотека, предоставляющая кучу возможностей для работы с телефонными номерами, из разряда распарсить введеный юзером телефон, выцепить код страны/города и т.п.

GreenDao — ORM для андроида основанная на генерации кода. Немного топорная, но работает значительно быстрее, чем всякие там ORMLite. Разработчики несколько странные. Когда был сделан форк они принципиально не принимали пул-реквесты. Теперь принимают, но при условии отправки им отсканенного подписанного соглашения. В их версии генерация кода запускается руками, что опять-таки немного странно, когда на дворе век систем сборки. Я форкнулся от форка, поддерживающего сборку на уровне gradle-plugin'а, позволяющая генерировать соответствующий код автоматически при сборке. Впилил автоматический upgrade для большинства случаев изменения схемы БД, присунул возможность сохранять/загружать данные с кастомными сериализаторами (что позволяет использовать Kryo для максимально быстрого сохранения/загрузки сериализованных данных), ну и расширил возможности gradle-plugin'а для работы с композитными индексами.

GSON — тут в общем-то нечего объяснять, одна из наиболее используемых библиотек для работы с JSON. Неплохо оптимизирована в плане сборки мусора, что позволяет рекомендовать ее для использования в мобилках, где с этим всегда проблемы.

Kryo — наиболее быстрая библиотека для сериализации/десериализации произвольных объектов. Очень удобная.

Guava — тоже, в общем-то, объяснять нечего, куча утилит, много штук, которых просто не хватает в стандартной Java.

Gson-XML — немного спорная библиотека, но позволяет быстро (с точки зрения времени разработки) подоткнуть GSON для десериализации XML.

AndroidAnnotations — это просто нечто. Библиотека, основанная на кодогенерации, позволяющая избавиться от большого количества абсолютно ничего не делающего кода, который так свойственен Java, а тем более Android, и сосредоточиться на, собственно, работе. На порядок упрощает создание и поддержку адекватной архитектуры больших Android-приложений, в т.ч. за счет обеспечения dependency-injection. Весомо облегчает работу с UI, особенно создания собственных компонентов. Вообще жить на андроиде без AndroidAnnotations — очень тяжко.

Каждая из них о-о-очень помогает. Особенно AndroidAnnotations, поэтому я сравнительно часто делаю pull-request'ы в этот проект.

Павел Черенков (@pcherenkov), системный программист Моего Мира:

Пример из жизни: в 2001 году мне помог Red Hat 7.3. Был кризис, и я сидел без работы. У меня был старый, маломощный компьютер и совсем не было денег на новый. Я установил Red Hat и получил вполне дееспособную среду для поиска работы по интернету, написания резюме, ведения почты и программирования в POSIX-совместимых системах, на которые я тогда решил профессионально переориентироваться.

Есть небольшой открытый проект в рамках GPLv3, (достаточно широко) известный в среде IPTV-энтузиастов: udpxy — прокси-сервер мультикаст-потоков. Проект стартовал в 2008 году как утилита для роутеров Asus Wl-500g, приложение вошло в открытую прошивку «от Олега». В настоящее время udpxy стандартно входит в различные прошивки «домашних» wifi роутеров, используется IPTV-пользователями и провайдерами, на нём базируется серверная часть многих IPTV OTT решений. Приложение было адаптировано (силами сообщества, в отдельных ветках) для работы на практически всех современных ОС (и аппаратных платформах), поддерживающих POSIX API для работы с сетью.

Арсений Жижелев (@primetalk), старший программист студии Allods Team:

Что означает для меня свобода программного обеспечения?

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

Право использования любым способом, произвольной переконфигурации. Для целей системного администрирования возникает потребность в конфигурации несколько изолированных контейнеров с разным набором программ. В случае свободного ПО (Ubuntu) такая возможность доступна. А что делать с проприетарным ПО? Разрешил ли владелец исключительных прав такой способ использования? Предусмотрел ли он его вообще?

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

Отсутствие искусственных ограничений, рассчитанных на пользователей начального уровня. Выпускается версия продукта, которая технически обладает развитыми возможностями, а в лицензии определённые виды использования запрещены. Здесь вообще можно случайно пересечь границу допустимого и использовать ПО неразрешённым способом. Для СПО, в то же время, есть только технические ограничения. Если удалось эти технические ограничения преодолеть, то можно спокойно пользоваться.

Независимость от произвола вендора. Например, Jabber, в отличие от Skype'а, не подвержен внезапному отказу от поддержки старых версий.

Отсутствие внедрённого непроизводительного кода. Тот же Skype содержит код, напрямую доставляющий рекламу пользователям. Зачем же мне реклама?

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

Для публикации своей программы в качестве СПО я вижу такие варианты мотивации:

Стремление поделиться интересными и полезными находками. Например, при работе над проектом могла быть разработана библиотека, полезность которой выходит за рамки проекта. Хотелось бы, чтобы интеллектуальный труд не пропал даром. В частности, библиотека SynapseGrid опубликована, исходя именно из такой мотивации. В проекте Речевой портал была разработана достаточно универсальная библиотека Functional reactive programming, позволяющая конструировать строго типизированный граф из простых функций. Очевидно, такая библиотека могла бы быть полезна и в других проектах. Кроме того, использование библиотеки другими командами позволяет обнаруживать баги или дорабатывать API.

Стремление привлечь широкую аудиторию к своему видению проблематики и путям её решения, а затем каким-либо образом монетизировать аудиторию — либо продавая услуги, либо продавая вторичные продукты (плагины), либо продавая «профессиональную» версию ПО.

Стремление улучшить то ПО, которым сам пользуешься. Предложение patch'ей разработчикам СПО, сообщение о багах, участие в обсуждениях.

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

Алексей Кожевников (@blackm00n), программист мобильных приложений My.Com:

Я пишу под iOS, а в жизни любого мобильного разработчика СПО проекты занимают важное место. Например, в моем текущем проекте используется почти 20 СПО зависимостей. Если взять типичное мобильное клиент-серверное приложение, то ситуация будет выглядеть примерно так.

Авторизация происходит с помощью номера телефона? Если да, то можно и нужно использовать libPhoneNumber-iOS для форматирования и валидации вводимых телефонных номеров. Облегчить преобразование JSON в персистентные модельные сущности поможет Mantle. Любой проект, использующий CoreData, трудно представить без утилиты mogenerator. Masonry облегчит использование AutoLayout в коде. Если клиент общается с сервером с помощью протокола WebSocket, то наверняка будет присутствовать зависимость от SocketRocket. Ну, и, конечно, для управления этими зависимостями скорее всего будет использоваться cocoapods, тоже СПО утилита. Вообще, в мобильной разработке СПО на СПО и СПО погоняет.

Что касается моих проектов, то в порядке уменьшение популярности:
QTree-objc — библиотека для стабильной кластеризации гео-данных с помощью алгоритма Quadtree. Простым языком: если пользователю требуется показать большое количество точек на карте (банкоматы, магазины и т.п.), то показывать их все сразу будет не лучшим решением. Будет лучше сгруппировать близко находящиеся точки в кластер, на котором будет, например, написано количество элементов. При зуме карты кластеры будут распадаться на элементы. Эта библиотека помогает реализовать такое поведение.
AKNumericFormatter — для форматирования числовых данных, в т.ч. и на лету.
AKTransliteration — для транслитерации текста по табличным правилам, сейчас есть ru <-> en правила.

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

А как вы связаны со свободным ПО?
Tags:
Hubs:
+35
Comments 26
Comments Comments 26

Articles

Information

Website
vk.com
Registered
Founded
Employees
5,001–10,000 employees
Location
Россия
Representative
Миша Берггрен