Select orthographic mistake with the mouse pointer and press Ctrl+Enter. Let’s make our language cleaner!
Якщо помітите помилку на цій сторінці, будь ласка, виділіть її вказівником миші та натисніть Ctrl+Enter. Зробімо наше мовлення чистішим!

2008-11-03

Лінукс очима розробника

(Стаття для http://www.grusha.org.ua)

Почалося все ще в університеті: на першому курсі лабораторні з програмування у класі HP Unix, потім Visual FoxPro у Windows NT4, лабораторні з чисельних методів знову в HPUX, невелика перерва, кафедральні спецкурси у Visual Studio 98. Далі перша робота на півтора місяця, де спробував було поставити собі RH Linux 5, але не подужав. Потім чотири роки розробки систем охорони у компанії ITV. Хоч і розробляли у Windows, ознайомився й почав використовувати переважно відкриті продукти: Vim для редагування, MinGW для компіляції, WiX для збірки інсталяційних пакетів. Нарешті, останні два роки працюю виключно в середовищі GNU/Linux у компанії Visonic, беру участь у розробці їхніх прикладних серверів та охоронних панелей.

Отже, панове, світу я побачив небагато, але якусь-таки думку про побачене довелося скласти. У цій коротенькій статті хочу поділитися з вами відповідями на два запитання:

  • Чому мій роботодавець обрав GNU/Linux для розробки своїх продуктів?
  • Чому я та мої колеги обрали GNU/Linux для повсякденної роботи?

Чому розробка для GNU/Linux?

Ми подібні до карликів на плечах гігантів.

Бернар де Шартр

Навіть на теренах систем охорони, традиційно стабільному ринку, в якому гравці добре знають один одного десятки років, відбувається конкуренція: нові продукти, нові якості, нові вимоги. З розвитком нових технологій з’являються нові можливості, без яких покупці не звертають увагу на продукцію. Наприклад, з розвитком інтернету та вебу користувачі схотіли отримати доступ до охоронної системи свого житла зі звичайного оглядача: якщо дитина повернулася раніше зі школи, зняти з охорони, дистанційно вимикати побутові прилади, переглядати зображення з камер, якщо трапилася-таки тривога тощо. Отже, перед розробником вибір: або самому написати стек протоколів інтернету (IP) або скористатися вже готовим.

Правда, вибрати серед готових платформ для розробки непросто: доводиться шукати компроміс між пропонованими засобами, якостями, підтримкою, ціною. Власне, для маркетингу всі ці терміни вимірюються кількістю грошей: додаткові риси — плюс до вартості приладу, проблеми з розробкою та супроводом — плюс до витрат, та ще й власна вартість. Тому попри особисті вподобання розробників рішення приймається прагматично. Цього разу вони таки співпали.

Отже, для побудови веб-комунікатора PowerLink компанія Visonic вибрала дистрибутив Лінуксу montavista для процесора Xscale-256, дала йому 32 Мб оперативної пам’яті, 128 Мб постійної пам’яті для кореневої файлової системи, контролер дротяної мережі і т. ін. Цього виявилося достатньо для взаємодії з охоронною панеллю, запуску веб-сервер Apache, обслуговування десятка камер у локальній мережі і не тільки. У такій системі користувач має змогу зайти на сторінку системи охорони свого житла, переглянути зображення з камер, стан побутових приладів, при потребі щось дистанційно змінити. Крім того, веб-комунікатор у випадку тривоги передає повідомлення із зображенням на сервер, звідки воно може переправитися на телефон чи/і електронну пошту господаря. Насправді зважаючи на вимоги надійності та безпеки система трохи складніша, проте її успіх зобов’язаний вибору відкритих технологій, громадській підтримці (на противагу комерційній) та відсутності ліцензійних зборів за користування доробками.

Трохи інша ситуація із сервером, бо кількість його інсталяцій заздалегідь менша. До нього висуваються більш жорсткі вимоги до продуктивності, адже один сервер повинен обслуговувати до ста тисяч приладів. Крім того, логіка роботи значно складніша, багато задач свідомо були перенесені на сторону більшої потужності. Це стосується, наприклад, обробки отриманих зображень. Проте все необхідне у нас вже є: C++ для вимогливих задач, Python, XSLT для редагування конфігурації, bash для склеювання різних частин, PHP для користувацького інтерфейсу тощо.

Найбільш цікавий та показовий випадок розробці сервера трапився тоді, коли постала задача розробити надлишкове рішення, тобто звести нанівець результат відмови обладнання. Вирішили використати два однакові сервери, на яких працює служба drbd для синхронізації оперативних даних. Інша служба heartbeat слідкує за життєздатністю, і як тільки виявляється зникнення зв’язку чи інша неполадка, роботу починає виконувати резервний сервер.

Найбільшим здивуванням для нас, розробників прикладної частини, стало те, що додання аспекту надлишковості обійшлося без втручання в наш код. Важко собі було б уявити таку можливість, якби не чітко розмежована архітектура ядра Лінуксу: драйвер жорсткого дискувіртуальна файлова системасистемні виклики. В цей ланцюг легко додати нову ланку, яка у нашому випадку займається синхронізацією даних із іншою системою. До слова, на це пішло місяців зо два, а от у попередньому підприємстві так і не розв’язали, наскільки мені відомо.

Давайте підсумуємо. Відкритість, простота, надійність, зручність для розробки — все це причина вибору платформи GNU/Linux у компанії Visonic.

Чому розробка у GNU/Linux?

Якби люди знали інструменти grep, sed, awk, ніколи не з’явилося б стільки красивих програм.

Народна творчість

Починаючи обговорювати речі, які стосуються людських смаків, ми завжди ризикуємо розпалити священну війну. Тому домовмося, що мої слова — це не категорична істина, а вираження мого особистого смаку. А на колір і смак, як відомо, всі фломастери різні. От взяти, наприклад, популярний віднедавна принцип побудови інструментів для дизайнерів WYSIWYG (what you see is what you get). Багато хто ні про що інше й чути не хоче, а для мене це кіт в мішку. На вигляд документ неабиякий, а відомо кому, яка каша там всередині? WYWIWYG (what you want is what you get) — це справжній шлях. Розуміння цієї моделі почалося з часів командної оболонки[1] Unix. Користувач просить систему виконати якусь дію чи навіть послідовність дій, детально описуючи цільові об’єкти, особливості операцій. При цьому вважається, що користувач розуміє, що хоче, а система повинна покірно виконати саме замовлені дії без відхилень і примх.

Візьмімо тестовий редактор. В моделі WYSIWYG робота з ним схожа на динамічну комп’ютерну гру: спіймав поглядом вказівник, підвів його до потрібного місця, натиснув на клавішу видалення тексту і тримаєш її до тих пір, поки зайві знаки не щезнуть. Просто захоплююче! А що ж натомість у нас? — Уявімо, що текстовий редактор розрізняє текстові об’єкти слово, рядок, речення, параграф, їх початки й кінці тощо. Також є набір дій над цими об’єктами: переміщення, видалення, заміна, копіювання. — Такий прилад не буде приковує увагу до елементарних дій, а слухняно виконує прохання користувача.

Трохи роззирнувшись, можна помітити, що такий підхід переважає у системах на зразок Unix: командний інтерфейс налагоджувача GDB[2], системи підготовки до друку LaTeX[3] та LilyPond[4] тощо. Мабуть, недарма: їх створили інженери, які розуміли, що тільки усвідомлені дії можуть принести і хороший передбачуваний результат і справжнє задоволення від творіння у такому середовищі.

Все в цій системі — програмування, тобто насправді ніхто не заставляє, але якщо треба виконати десяток однотипних дій, то відразу відчувається доречність можливості. Мудро, наче в одному радянському мультфільмі: “Краще витратити годину, а потім за п’ять хвилин долетіти”.[5] Для програмістів така можливість — це особливе задоволення: з одного боку автоматизація вкрай проста, тому рідко бувають невдачі, а з іншого потім відчуваєш себе на голову вищим від індуса (даруйте, людини з конвеєру). Скриптування підтримують: командна оболонка[1], текстові редактори, налагоджувач[2], LaTeX[3], MetaPost[6], системи контролю версій і багато інших. І головне: просто, без занадто розумних слів та заплутаних технологій. Більше того, особливих надзвичайностей у різних, здавалося б, програмах зовсім небагато, адже не на порожньому місці всі вони будувалися. Так, всюди використовуються одні й ті самі регулярні вирази, для зчитування запитів командного рядка використовується одна й та сама бібліотека readline, ключі командного рядка повторюються від програми до програми…

Розробляєш прикладний сервер — будь готовий до можливих проблем, а ще морально підготуйся до того, що “на льоту доведеться міняти обшивку крил”. Це треба відчути на власній шкурі, бо стільки адреналіну виділяється тільки на рингу чи в затяжному стрибку (з того самого недобудованого крила!). А потім розумієш, що не пережив би той день, якби всі давно вивчені та полюблені інструменти не працювали через мережу прозоро, наче й не через мережу зовсім. Простіше не придумаєш: під’єднавшись до віддаленого сервера, отримуєш командну оболонку і відчуваєш … тепло й затишок рідного оточення. Завбачливо передаєш опцію -X — і милуєшся вікнами віддалено запущеної графічної програми (viva wireshark[7]!). Монтуєш директорію з вихідними кодами — і можеш розпочинати налагодження, не займаючись щохвилинно копіюванням. Рай на Землі!

Нарешті, є й унікальні речі, яких не знайти на інших платформах. От, прийшовши зі світу Win32, я відразу ж кинувся шукати спосіб перехоплення даних з послідовного порту. Справді, дуже потрібна штука той portmon[8], щоб зрозуміти, як байти бігають по дротах. А дзузьки, зовсім нічого нормального! І раптом осяйнуло: “А все те просто зайве, адже є strace[9]!” З прозрінням прийшло й розуміння: це все відкритість! Linux не ховає таємниці за сімома печатками, штовхаючи допитливих до відчайдушних способів злому, а радо ними ділиться. Якщо не віриться, поцікавтесь-но, як працює той самий portmon[8]. Проблеми бувають всюди, а щоб їх вирішити комусь доводиться танцювати з бубном, а хтось може зазирнути у вихідний код чи навіть підглянути, як все працює in vivo. Отже, в такій системі працювати не тільки приємно, але й легко!

І наостанок про ностальгію, тільки не про ту, що ту́га за втраченим, а про ту, яка теплий спогад про минуле. Я про університет: розумні й досвідчені викладачі, цікаві однодумці-студенти, щодня нові враження від навчання й життя. Зізнаюся відверто, те саме відчуваєш, працюючи з відкритою громадськістю. Тут ідеї, доробки — це знання, якими радо діляться, а не торгують. Це справді приємно!



[1] Командна оболонка — інтерпретатор команд операційної системи Unix.

[2] GNU debugger — налагоджувач програм у системі GNU

[3] LaTeX — набір макросів TeX для отримання PDF чи PostScript з тексту

[4] LilyPond — система підготовки до друку музичних творів, чимось нагадує LaTeX, тісно з ним взаємодіє.

[5] Крила… ноги… головне — хвіст!

[6] MetaPost — це пакет для креслення здебільшого математичних ілюстрацій, інтегрується з LaTeX.

[7] Wireshark — графічна програма для перехоплення мережевих даних, незамінний помічник у розробці.

[8] portmon — зручний перехоплювач даних з послідовного порту, буває в нагоді при налагодженні взаємодії з деяким спеціальним обладнанням.

[9] strace — маленький інструмент, що відображає взаємодію прикладної програми з ядром Linux, тобто відображає системні виклики.