KolibriOS с точки зрения программиста

Прикладное программирование
Одним из первых и наиболее важных вопросов, возникающих при программировании чего бы то ни было, является вопрос о выборе среды разработки в целом и языка программирования в частности. Поэтому для начала следует сказать несколько слов о возможностях, предоставляемых в этом плане Колибри.
Программы для операционной системы KolibriOS представляют собой по сути 32-битные двоичные файлы с небольшим заголовком, поэтому от используемого компилятора требуется возможность получения таких файлов. Если компилятор это поддерживает, то его можно без проблем использовать. Но даже если компилятор этого не умеет, во многих случаях все же существуют обходные маневры. Список «допустимых» компиляторов включает в себя следующие (но не ограничивается этим): ассемблеры FASM, NASM, MASM; компиляторы Visual C++ и C++ из Visual Studio, GCC/G++, Borland C++, Sphinx C--; есть специальные версии
компиляторов Tiny C и Pascal Pro, умеющие создавать бинарные файлы для Колибри. Разработка с использованием этих компиляторов подробно описана в этой статье (английский перевод).
К сожалению (не верю своим ушам, тоесть глазам - прим. ред.), версию под Колибри имеет только FASM, который и является основным инструментом разработчиков этой ОС – на нем написано большинство программ (а также ядро). Tiny C изначально портировался с целью создать компилятор C, работающий под Колибри, но через некоторое время энтузиазм у единственного в этом направлении разработчика угас и процесс остался незавершенным. Возможно, кто-нибудь из читателей этой статьи заинтересуется и исправит ситуацию?
Графический пользовательский интерфейс (GUI) в Колибри встроен в ядро. Приложениям доступны системные вызовы отрисовки графических примитивов в своем окне. Вот список примитивов:
пиксель; текст; изображение (массив в памяти RGB-значений или индексов из палитры); прямоугольник; отрезок; числовые данные (с точки зрения пользователя тоже текст, но приложение задает не строку, а число, которое преобразуется в строку ядром и выводится). Также есть возможность прямого доступа к графике – чтение данных графического экрана без использования системных функций, что существенно быстрее попиксельного сканирования с 1024х768 системными вызовами (в соответствующем разрешении).
Каждый поток может создать и рисовать только в одном окне, но одно приложение способно управлять несколькими окнами, если создаст соответствующее количество потоков.
Кроме того, представлена стандартная динамическая библиотека для консольного вывода (которая в будущем, по заверениям автора, станет обрабатывать и ввод). Использование в программе динамических библиотек увеличивает ее размер лишь незначительно (на величину примерно 300-400 байт), поскольку весь код и данные остаются во внешнем файле, который один и тот же для всех ссылающихся программ.
Из элементов управления ядро предоставляет только кнопку (в том числе, с градиентной заливкой). Однако существуют реализации других элементов управления, не опирающиеся на поддержку ядра.
А именно: компоненты editbox, checkbox и radiobutton, реализованные как включаемые библиотеки (в отличие от динамических библиотек, во-первых, подобный код включается в каждую ссылающуюся программу и, во-вторых, использовать такой код можно практически только при работе на FASM, на котором написаны сами компоненты).
В настоящее время на форуме разработчиков Колибри идет выработка единой динамической библиотеки компонентов и единого стиля интерфейса; статья писалась в марте 2007 года, но учет больших объемов работы и малого количества участников показывает, что этот процесс наверняка будет долгим. Так что присоединяйтесь!
Видимо, любому программисту интересны существующие возможности по отладке приложений. Для Колибри написан отладчик, работающий на уровне машинного кода (команды отдаются через командную строку, отображение состояния – GUI). Вместе с тем можно программно использовать возможности ядра по отладке.
Механизмы межпроцессной связи (IPC, Inter Process Communication) ограничиваются возможностью посылать и принимать IPC-сообщения, представляющие собой произвольные данные с форматом, полностью определяемым приложением. Через IPC реализованы стандартные диалоги открытия и сохранения файла.

Системное программирование
Ядро целиком написано на ассемблере FASM. Этим достигается высокое быстродействие и небольшой размер системы.
Ядро монолитное, с возможностью загрузки внешних драйверов. На данный момент драйверы существуют для поддержки звука для кодеков AC97 (два варианта: один драйвер для Intel и NVidia, другой – для SiS) и для поддержки аппаратного курсора мыши у видеокарт ATI (для NVidia подобный драйвер еще не написан).
Пользовательский код исполняется в 3-м кольце, системный – в 0-м кольце. Исключение, вызванное пользовательским потоком (в том числе попытка обращения к не принадлежащей потоку памяти и привилегированная инструкция), приводит к тому, что ядро завершает такой поток, оставляя систему в работоспособном состоянии. Более того, исключения в системном коде во многих случаях также приводят к «падению» только потока, вызвавшего исключение. Процессорное время делится между всеми потоками поровну, каждые 0.01 секунды ядро передает управление очередному потоку (поток может использовать свой квант частично, тогда переключение произойдет раньше, чем через указанный интервал). В этом
смысле все потоки равноправны, включая поток операционной системы, который обрабатывает мышь (рисует курсор и отслеживает события, происходящие с мышью типа перемещения/нажатия/нажатия на кнопки, определенные приложениями), сеть, завершает процессы, перемещает окна, отслеживает нажатия <Ctrl+Alt+Del>, а в свободное время дает процессору отдохнуть инструкцией hlt.
Для работы с портами ввода/вывода не обязательно забираться в ядро и/или писать драйвер. Для этого существует специальная системная функция, резервирующая за приложением запрошенные им порты – конечно, если это не противоречит желаниям самой системы и других потоков.

Источники информации
Основной ресурс разработчиков Колибри – это русскоязычный форум http://board.kolibrios.org. Там происходят все обсуждения, выкладываются текущие версии программ с описанием возможностей и изменений, идут оживленные разговоры и дискуссии.
На русскоязычном форуме создан раздел для английских сообщений, но англоязычные разработчики собираются на http://meos32.7.forumer.com (более не актуален - прим.ред.). Впрочем, этот форум значительно менее популярен – абсолютное большинство разработчиков Колибри говорит по-русски.
Официальный сайт проекта Колибри http://kolibrios.org.
Разработчики ядра и программ используют svn-репозиторий на svn://kolibrios.org. Содержимое репозитория на чтение доступно также через http-интерфейс с сайта http://kolibrios.org. Текущая версия ядра всегда берется из репозитория, исходники многих программ также доступны там, но не всех (например, исходники файлового менеджера KFM в данный момент закрыты). Последние версии всех программ вместе с описанием изменений всегда выкладываются на форуме, там же идет обсуждение недостатков, пожелания по развитию и т.п.
Полная документация (справочник) по системным вызовам включается во все дистрибутивы в формате txt (sysfuncr.txt, sysfuncs.txt – для русского и английского дистрибутивов соответственно) и в формате chm (Windows-Help: klbr_doc.chm и klbr_doc_eng.chm), а также в приложение docpak в самой Колибри. Кроме того, этот же справочник как набор html-файлов включается в исходники дистрибутива. Версия документации, соответствующая текущей версии ядра, доступна на http://diamondz.land.ru (версия в дистрибутиве, естественно, описывает ядро, входящее в дистрибутив, которое устаревает по мере разработки) – как обычно, изменения в ней описываются на форуме.
Со статьями по программированию дело обстоит существенно хуже. Можно только вспомнить про «электронный журнал «Вестник КолибриОС», существующий (опять же следует учитывать, что статья писалась в марте 2007) в единственном номере. Русский и английский варианты доступны на http://kolibrios.org. Там, в частности, описана простейшая программа для КолибриОС и приемы модификации системных функций ядра. Только имейте в виду, что статьи иногда неточны. Кроме того, отдельные вещи устарели.
В целом в операционной системе Колибри есть огромное количество еще не реализованных возможностей. Это относится как к ядру, так и к прикладному программированию.
Присоединяйтесь к проекту, и какие-то из этих возможностей станут реализованными благодаря вам!

Евгений Гречников с небольшими исправлениями