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



Сьогодні особливий день для всіх шанувальників ідей Річард Столлман. Цей чоловік вже з 1983 року є головним ідеологом руху за вільне програмне забезпечення. І сьогодні відзначається ювілейний, десятий щорічний день цієї самої свободи.

Незважаючи на те, що критерії вільного програмного забезпечення виглядають досить дико в умовах повсюдного капіталізму, це не перешкодило появі і успішному розвитку таких відомих проектів, як 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.race або Promise.any, тому, коли всі браузери введуть підтримку Promise, полифил можна буде безболісно видалити, використовує його код переписувати не доведеться. Полифил може працювати як в браузері, так і в якості Node.js модуля. Асинхронність досягається використанням setImmediate.

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

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

Останнє, що замутив, — управління EnerGenie EG-PMS-LAN з перлячки Device::Gembird. Якщо кожен буде намагатися внести свій невеликий внесок в те, чим він цікавиться, то ці проекти будуть розвиватися швидше.

Микола Тимченко nickynick), програміст мобільних додатків Му.Сом:

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

У своїх проектах я використовую досить велика кількість open-source коду, але важливо розуміти, що кожна наступна підключена бібліотека — це часткова втрата контролю над проектом. До дійсно незамінним можна віднести речі, пов'язані зі специфічними функціями, наприклад, широко відомий ffmpeg або місцевий GPUImage (бібліотека для високопродуктивної обробки зображень). Ще є місцева реінкарнація Rx, ReactiveCocoa, що дозволяє елегантно розплутати дуже неприємні шматки UI коду, пов'язаного з станами і реакцією на різні дії користувача.

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

Марат Радченко slonopotamus), провідний програміст студії Тільки 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), старший програміст студії Тільки 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 різноманітніше, цікавіше і ближче до людей. Спасибі!

А як ви пов'язані з вільним?

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.