Главная

Отчет о контракте Хайку: Декабрь 2021 года

Впервые большая часть работы, которую я выполнил в рамках этого контракта, не была включена в отчет о деятельности за месяц, за исключением краткой ссылки, поскольку почти всё это происходило за пределами основного дерева Haiku. Итак, сейчас я всё подробно опишу; и еще раз спасибо вам за щедрые пожертвования!

Почти вся моя работа в прошлом месяце была потрачена на одну вещь, о которой говорилось в отчете о деятельности:

“Xlibe”: уровень совместимости Xlib/X11 для Haiku

Итак, в моем предыдущем отчете по контракту была заметка о возможности написания “уровня совместимости Xlib”, то есть реализации API X11 без сервера X11.

Я подумал, сможем ли мы сделать что–то подобное для Haiku, чтобы переносить приложения X11 (или даже целые тулкиты) без написания отдельных нативных бэкэндов для каждого из них, а также без запуска всего сервера X11 в фоновом режиме. После некоторых экспериментов я думаю, что это действительно более чем осуществимо, хотя мы посмотрим, как далеко мне удастся зайти и насколько быстро…

Как уже знают те из вас, кто читает форумы, эксперимент зашел довольно далеко и фактически в течение нескольких недель, вероятно, появится в репозиториях пакетов вместе с основным стимулом для этого проекта — портом GTK.

(Некоторые объяснения взяты из веток форума или других материалов.)

Зачем вообще писать уровень совместимости Xlib/X11, а не собственные бэкэнды?

Нативные бэкэнды для тулкитов, очевидно, предпочтительнее, что позволяет более тесно интегрироваться с системой; порт Qt использует этот подход, и это достаточное доказательство того, что такие вещи возможны и желательны. Тем не менее, Qt является своего рода исключением во многих отношениях; Qt хорошо абстрагирован внутренне, как и большинство других тулкитов, и он имел широкий спектр поддерживаемых платформ еще до того, как был портирован на Haiku.

Не все тулкиты похожи на это; на самом деле их очень мало. GTK имеет бэкэнды только для X11, Wayland, Windows, macOS и Broadway(HTML5). Бэкэнд macOS, в частности, долгое время был довольно плохим, поэтому большинство пользователей GTK–приложений на macOS предпочитали использовать X11 через XQuartz. Другие приложения, такие как “AzPainter”, поддерживают X11 и только X11; или, возможно, у них есть поддержка Wayland, но даже нет порта Windows или macOS, о котором можно было бы говорить. После переноса программного обеспечения с X11/Wayland есть некоторая надежда, что можно написать нативный бэкэнд для совершенно другой платформы, но часто до этого система будет делать слишком много предположений о том, на чем она работает, чтобы перенос стал возможным.

Таким образом, даже если бы написание бэкэнда GTK для Haiku было возможным или выполнимым, существует отдельное значительное количество программного обеспечения Linux/и т.д., которое действительно можно перенести, только перенеся X11 или Wayland.

Почему бы просто не перенести сервер X11?

Мы могли бы, как это сделано для Windows или macOS, но, учитывая недостатки этого подхода и гибкость API–интерфейсов Haiku, я понял, что можно повторно реализовать API–интерфейсы X11 непосредственно поверх API–интерфейсов Haiku (ну, за некоторыми незначительными исключениями, конечно), без сервера X11 и фактически предоставить множество преимуществ, которые предоставит “по–настоящему” нативный сервер. Например, “Xlibe” может напрямую переводить свойства и атрибуты окна X11 в атрибуты Haiku, и есть возможность даже выполнять операции перетаскивания, в то время как порт сервера X11, скорее всего, столкнется с трудностями при полной интеграции этих функций между клиентскими приложениями X11 и приложениями Haiku.

Не сделает ли это нативные бэкэнды устаревшими и ненужными?

Вовсе нет; нативные бэкэнды для тулкитов и приложений по–прежнему будут иметь гораздо большую интеграцию, чем может обеспечить уровень совместимости X11. Фактически, это открывает дверь для “инкрементного” переноса: можно перенести часть программного обеспечения, которое в основном использует X11, а затем постепенно заменить его части, чтобы напрямую использовать API–интерфейсы Haiku вместо X11 (я думаю или, по крайней мере, надеюсь, что движки поддержки визуальных тем интерфейса будут первым местом, где будет использован код, специфичный для Haiku).

Почему Xlib/X11, а не Wayland?

API–интерфейсы Wayland очень спартанские и основаны на протоколах; то есть существует больше реализаций протокола, чем просто “libwayland”, что делает практически невозможным написание только одной библиотеки для совместимости с Wayland, но вместо этого, вероятно, требуется реализация сервера. Хотя помимо Xlib существуют и другие реализации интерфейса X11 (в частности, Xcb, на котором основан современный Xlib), они используются очень редко, и на самом деле реализация сервера X11 поверх Xlib более чем возможна (Xnest, хотя и очень ограниченный по сравнению с Xephyr, фактически является таковым), в то время как реализация сервера Wayland, работающего на Wayland, является чисто экспериментальной территорией.

(Справедливости ради, реализация уровня совместимости X11 сама по себе тоже является несколько экспериментальной территорией. Tk повторно реализует ряд API Xlib внутри как часть своего кроссплатформенного кода графического интерфейса, и как мне рассказывали, что были проведены некоторые эксперименты с реализацией Xlib непосредственно поверх Wayland, но, насколько мне известно, Xlibe уже является самым передовым проектом в этой области, хотя есть еще много вещей, которые он еще не делает, но мог бы).

За пределами GTK…

Я также тестировал множество других приложений и наборов инструментов. Tk запускается, но быстро сталкивается с некоторыми довольно запутанными проблемами, которые я не совсем уверен, как решить (в основном, BackgroundElement — они помещаются перед всем остальным содержимым). Motif компилируется и (с некоторыми хаками) запускается, но довольно быстро сталкивается с поведенческими проблемами. Базовые приложения Xt/XAW в основном работают (xclock например, хотя есть сбои при рендеринге, поскольку предполагается, что весь рисунок нарисован без сглаживания).

Тем временем X512 использовал Xlibe для графического вывода в WINE:

(Однако, похоже, что лучшим долгосрочным решением будет написать нативный бэкэнд Haiku для WINE, над которым X512 уже начал работать).

Внутренние изменения

Во время работы над Xlibe я исправил множество мелких деталей в самой Haiku. Среди них был сбой app_server, связанный с пользовательскими курсорами, путаница в параметрах размера BBitmap и некоторые неясности в нашей документации API, а также некоторые другие связанные с этим вопросы.

В HaikuPorts я очистил и обновил существующие заголовки и библиотеки X11 в рамках подготовки к публикации Xlibe и GTK. (Однако сама Xlibe еще не включена в HaikuPorts — у меня все еще есть несколько дел в моем списке задач, о которых нужно позаботиться, прежде чем это произойдет. Если повезет, это должно произойти ещё до следующего отчета о контракте!)

Обновление GCC 11.2

Технически обновление GCC 11.2, которое заняло большую часть ноября, было завершено и объединено только в первые недели декабря. Большинство первоначальных регрессий, которые оно вызвало, были устранены или есть временное решение (в частности, проблемы с WiFi, о которых я упоминал в своем последнем отчете о контракте, имеют только обходной путь, а не надлежащее исправление).

Что дальше?

Конечно, заканчиваю Xlibe, а затем отправляю его в HaikuPorts!

А потом, где–то в следующем месяце или около того, кажется, мы собираемся начать подготовку к еще одному бета–релизу. (Может быть, последний перед самим R1?) Я полагаю, что в конечном итоге я возьму на себя большую часть «черной работы», которая входит в релиз, а также отслежу блокирующие регрессии (и на этот раз их несколько).

И это все?

На этот раз этот отчет несколько короче: “всего” ~1300 слов вместо 2000+, как в предыдущие разы. (Я мог бы написать довольно много о внутренностях Xlibe и механике отображения API, но для тех немногих из вас, кто интересуется такими вещами, исходный код, вероятно, сам по себе и лучшее объяснение, чем я написал бы здесь.)

Увидимся в следующем месяце!

Augustin Cavalier

Оригинал статьи: https://www.haiku-os.org/blog/waddlesplash/2022–01–10_haiku_contract_rep…

Круто!

Круто!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
V
8
s
p
n
x
Enter the code without spaces and pay attention to upper/lower case.