Haiku: погружение

Привет! Эта запись пишется в Haiku, установленной на ноутбуке. ZeroNet взят из git. Для его запуска понадобилось поставить пару модулей через pip, с указанием библиотеки сетевых функций:

-> LIB=-lnetwork pip install msgpack gevent
Image for post
Image for post

Сам текст набирается в консольной версии emacs, с включённым flyspell-mode. Правда, чтобы это стало возможным, мне пришлось внести правки в порты aspell и emacs.

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

Апология

Я не буду пытаться убеждать читателя, что Haiku лучше какой-то другой операционной системы и рассказывать чем именно. С моей стороны это было бы лукавством. Но дело в том, что меня не очень интересует “потребительская” сторона вопроса, когда я занимаюсь ИТ.

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

Image for post
Image for post

Итак, моя апология проста — Haiku интересная ОС!

Меня заинтересовала система и я начал её изучать. В этом смысле, какие-то проблемы и ошибки воспринимаются не как препятствие, а как лишний повод помочь проекту.

Миниатюрность

-> shutdown -r
# прошло немного времени...

Ubuntu загружалась 30 секунд до GDM и еще где-то 7 секунд до рабочего стола. Haiku загрузилась до рабочего стола примерно за 20 секунд.

У меня есть второй древний ноутбук на Pentium. Haiku стартует на нём примерно за те же 20 секунд.

Haiku не поддерживает никакого режима сна. Но скорость загрузки (и моментальное выключение) это частично компенсирует.

Я уже писал, что исходные коды системы занимают пару сотен мегабайт.

Я был не вполне прав. Часть редко изменяемых компонентов (например, WebKit) поставляются в виде готовых собранных пакетов, что сильно ускоряет сборку. Тем не менее, как и в случае с BSD, вся система представляет из себя единый проект, что упрощает её изучение.

Несмотря на лаконичность, система все-таки поддерживает основное оборудование. По крайней мере на ноутбуке заработал звук, wifi, проводная сеть. Можно установить яркость подсветки (на intel).

Итак, система миниатюрна. Но ей вполне можно пользоваться на реальном железе (если, конечно, заработает ваше оборудование). Откровенно говоря, я всё еще испытываю проблемы с некоторым железом. Что, правда, не мешает мне пользоваться этой ОС.

Однопользовательская система

Зато это, в каком то смысле, упрощает жизнь. По крайней мере, я это ощутил. Просто запустил и работаешь. Никаких sudo, никакой мороки с правами. Никаких авторизаций. :) Пишу это и прямо вижу как трясёт бывалого Unix-оида. Понимаю, и мне даже нечем вас утешить, кроме того, что я сам Unix-оид. :)

Впечатления от использования

  • терминал;
  • emacs (flyspell, w3m);
  • Браузеры Qupzilla и Dooble (в целом, адекватны современному
    интернету);
  • Telegram клиент;
  • Vision (irc клиент);
  • LibreOffice;
  • ZeroNet;
  • qbittorrent;
  • MediaPlayer;
  • Mail;
  • INSTEAD.

Чего нет, и я это заметил:

  • gimp (вообще, нет ничего gtk-шного, так как этот тулкит не
    перенесён. Но есть Krita);
  • inkscape;
  • darktable;
  • firefox.

В плане энергопотребления, система ест точно не больше Ubuntu.

Пакеты и обновление системы

-> pkgman update
-> shutdown -r # если обновилась система

Я уже писал, что установка пакета — это его монтирование. Это, кроме красоты, несёт и полезное свойство — возможность откатываться к прошлым состояниям. Например, после одного из обновлений системы, мой второй ноутбук стал виснуть на загрузке. Чтобы вернуться к рабочему состоянию, я просто нажал “пробел” в момент работы загрузчика и выбрал предыдущее состояние из списка… То-есть, система поддерживает журнал состояний системы в смысле установленных пакетов. Правда, если этот журнал разростётся, это начнёт замедлять работу загрузчика.

Состояния записываются в /boot/system/packages/administrative и вы можете их почистить.

Часто бывает нужно заменить какой-то один из компонентов пакета. Например, драйвер. Для этого предусмотрен каталог /boot/system/non-packaged. Например, таким образом я отлаживал драйвер wifi. Чтобы не пересобирать всю систему, я собирал только драйвер и клал его в non-packaged.

Разработка портов

Image for post
Image for post

Я внёс несколько изменений в некоторые порты. В частности, одно из изменений позволило мне писать этот текст в emacs. На самом деле, для разработки портов порог вхождения совсем не высок.

Вы забираете дерево haikuports и haikuporter из github. Читаете инструкцию и вот, вы уже готовы собирать пакеты из исходников.

Если нужно изменить какой-то пакет, то к вашим услугам функции haikuporter по автоматическому созданию патчсетов. Добавить новый порт — тоже не проблема. Дальше — делаем PR и ждем…

Есть, конечно, свои нюансы и вопросы:

  • как должна выглядеть структура каталогов пакета;
  • как создать векторную иконку;
  • где хранить настройки программы;
  • и т.д.

Но во всём этом несложно разобраться, а описание процесса создания пакета — отдельная история.

В качестве примера, вот как выглядит рецепт для INSTEAD.

К счастью, когда я писал эту статью появилась подробная статья по портам от EXL. Вы можете прочитать её здесь.

Сборка системы

-> jam -q @nightly-anyboot

Вообще, система сборки очень простая. Например, когда я что-то исправляю в системе, я собираю на самой системе только то, что нужно:

-> jam -q iprowifi4965
-> cp objects/haiku/x86_64/release/add-ons/kernel/drivers/network/wlan/iprowifi4965/ipro
wifi4965 /system/non-packaged/add-ons/kernel/drivers/bin/iprowifi4965

Вот и весь цикл разработки. В общем, это всё создаёт приятное ощущение того, что ты владеешь системой. То чувство, которого почти не осталось в Linux. Я приведу пару примеров.

Пример 0: xhci

-> tail -f /var/log/syslog

То увидел постоянные сообщения от ядра системы… Мне это не понравилось. Я скачал исходный код и нашёл сообщения в коде. После этого я собрал haiku.hpkg с отладочными сообщениями xhci и начал искать проблему. Довольно быстро удалось найти ошибку и исправить её.

Кстати, это не тот syslog, что используется в Unix. Например, в него сохраняются сессии из отладчика ядра KDL.

Пример 1: iprowifi2100

Теперь адаптер iprowifi2100 снова работает во FreeBSD и в Haiku.

Пример 2: почта

~> launch_roster info x-vnd.be-post

Почтовые сообщения складываются в виде отдельных файлов в свои каталоги. Дальше, вы открываете файловый менеджер и смотрите сообщения.

Image for post
Image for post

Если вы выберете какое-то из сообщений — откроется программа просмотра (и написания) почты. Красиво и просто.

К сожалению, почта у меня не работала с mail.ru и частенько валилась. После марафона отладки появилась серия патчей, которая позволяет мне пользоваться почтой на постоянной основе.

Отладка

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

Image for post
Image for post

В общем, установив систему, вы сразу готовы к полезной деятельности. ;)

Рассмотрение патчей

Image for post
Image for post

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

Но на самом деле gerrit оказался удобной и полезной штукой. Кратко, алгоритм действия такой:

  • Регистрируетесь на https://review.haiku-os.org
  • Добавляете свой открытый ssh ключ
  • Забираете проект git clone ssh://user@git.haiku-os.org/haiku
  • Далее, можно пустить бранч и делать изменения
  • $ git commit
  • $ git push origin HEAD:refs/for/master

Далее, вам могут написать замечания, которые вы отрабатываете.

  • Отработали замечания
  • $ git commit -a — amend
  • Убедиться что в комментариях к коммиту есть “Change-Id: ID тикета в gerrit”
  • $ git push origin HEAD:refs/for/master

Вы можете прочитать о правилах добавления своих изменений здесь.

Также будет полезен Development FAQ.

Вместо заключения

Мы живём в мире, где ценность принято мерить коммерческой эффективностью. Я лично не разделяю такого взгляда на мир. История развития ИТ знает много примеров, когда отличные, красивые решения были вытеснены громоздкими и уродливыми продуктами. Похожие вещи можно найти и в других сферах человеческой деятельности… Так или иначе, Haiku — очень интересная система, которой не хватает внимания свободных разработчиков. И кто знает, может быть, вы и есть такой разработчик? :) И если моя статья вас заинтересовала — я достиг своей цели.

Written by

Русский. Пишу интерактивную литературу.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store