phdru.name / Russian / Software / Unix

Немножко о программировании в Unix

Unix вообще и Linux в частности устроены слоисто. На самом нижнем слое идёт ядро - программа, управляющая железом, и предоставляющая пользователю набор стандартных интерфейсов.

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

Поверх этой конструкции выполняются системные программы. Ядро Unix никогда не читает файлы конфигурации; для конфигурации на конкретном компьютере выполняются разнообразные системные программы, которые читают файлы конфигурации из директории /etc, и передают параметры ядру.

Затем идёт толстый слой прикладных библиотек, которые обращаются друг к другу и к libc за различными сервисами - аутентификация и авторизация, математические библиотеки, сетевые протоколы и т.д. и т.п.

Над всем этим идут, наконец, прикладные программы - то, ради чего ОС и существует.

X Window System

Одной из главных прикладных программ является графическая оболочка. Наиболее широко распространённая оболочка - X Window System, часто называемая просто X Window (ни в коем случае не X Windows!), XWin или вообще X.

X Window, как и всё остальное, устроено слоисто. Самой низкоуровневой частью является X-сервер - программа, управляющая железом (экран, клавиатура, мышь). К серверу обращаются программы-клиенты - собственно, любые "иксовые" программы. Обращаются они по протоколу TCP (т.е. программа-клиент может работать на удалённом компьютере), а особенности обращения (команды "создать окно", "нарисовать линию" и т.п.) инкапсулируются в библиотеке Xlib. Собственно, X Window - это не графическая система, а название протокола, и любые программы, владеющие языком этого протокола, будут работать с любым X-сервером.

В настоящий момент используется 11-ая версия протокола, X11. Существует несколько реализаций сервера. Когда консорциум компаний www.x.org, породивший протокол, перестал активно функционировать (тем более выпускать софт для Linux, поддерживающий современное железо), был рождён проект XFree86, долгое время бывший главной реализацией X-сервера. Административные и технические проблемы привели к тому, что часть народа из проекта ушла. Они не стали выдумывать новое имя для организации, а оживили x.org, в результате чего их реализация сервера называется Xorg. XFree86 потихоньку сдулся, и вряд ли сейчас функционирует.

Одной из главных клиентских программ в XWin является менеджер окон. Это программа, которая управляет окнами и центральным меню XWin. Она дорисовывает окошечное обрамление (рамки окон, системные меню окон, кнопки "минимизировать/максимизировать/закрыть"); иксовые программы сами этим не занимаются. Поскольку оконный менеджер можно сменить, то и внешний вид всего этого обрамления будет другой - в X Window нет никакого стандартного вида окон.

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

Протокол X11 довольно сложен, даже с помощью библиотеки Xlib его мало кто использует посредственно. Следующий слой поверх Xlib - библиотеки, называемые toolkit. Это библиотеки, позволяющие создавать окошечные объекты (окна, диалоги, меню, и т.д.) в определённом стиле. Широко известна, например, коммерческая библиотека Motif, позволяющая создавать приложения, выглядящие... ну, не как в w32, скорее, как OS/2. Но наибольшее распространение сейчас получили свободные библиотеки GTK+, Qt и Tk. GTK+ и Qt распространены примерно одинаково, Tk несколько меньше, возможно, потому что требует программирования на языке Tcl. Графические среды GNOME и Xfce основаны на тулките GTK+, KDE на Qt.

Все три библиотеки портированы в MacOS и w32, поэтому скомпилировав исходники программ, использующие одну из этих библиотек, можно перенести программу в другую ОС. Этого, однако, бывает недостаточно, чтобы полностью инкапсулировать особенности ОС, поэтому существует другой подход. Библиотека wxWidgets предоставляет широкий набор программных интерфейсов, независимых от операционной системы. Для создания графического интерфейса в Unix wxWidgets использует GTK+, а в w32 - Win32 API; это позволяет программам, написанным с помощью этой библиотеки, выглядеть более "по-родному" в разных ОС.

Сам я использую ещё один слой - поверх wxWidgets использую оболочку wxPython, позволяющую использовать классы и функции wxWidgets из языка Python.


Эта страница https://phdru.name/Russian/Software/Unix/prog.html была сгенерирована 14.07.2021 в 00:38:07 из шаблона CheetahTemplate prog.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.