Автор проекта SerenityOS представил браузер Ladybird

be_5o8jf7atabgtxac1r7dzgbb4.png
Браузер Ladybird проходит тест Acid3 на 100 баллов. awesomekling.github.io

Андреас Клинг представил проект веб-браузера Ladybird. В новом браузере веб-страницы рендерит не какая-то версия открытых движков Gecko или Blink, а JavaScript обрабатывает не форк свободных SpiderMonkey или V8. Клинг построил кроссплатформенный браузер на основе движков LibWeb и LibJS из другого своего проекта — операционной системы SerenityOS.

Как браузер, так и его библиотеки написаны на языке C++ с участием библиотеки Qt. (Хотя у сообщества разработки SerenityOS в разработке находится язык программирования с безопасностью доступа к памяти Jakt, он ещё не готов к использованию в Ladybird.) Браузер Ladybird и компоненты его движка лицензированы под двухпунктной лицензией BSD, то есть допускается распространение, изменение и коммерческое (в том числе проприетарное) использование.
Клинг предлагает считать датой рождения проекта Ladybird 4 июля, когда разработчик записал небольшой видеоролик [во вставке ниже], где он создаёт простой графический интерфейс на Qt для движка LibWeb. На тот момент участники проекта SerenityOS уже довели LibWeb до успешной сборки на Linux в режиме headless, без вывода графики на экран. Клинг намеревался лишь сделать инструмент для отладки библиотеки LibWeb из SerenityOS в Linux, поскольку многим так удобнее. За 2 месяца разработки порт браузера из SerenityOS перерос в полноценный кроссплатформенный веб-браузер.


Технологический стэк браузера построен на основе 12 основных компонентов:

  • Ladybird. Приложение браузера с табами. На данный момент весь браузер Ladybird однопоточный, хотя браузер в SerenityOS использует отдельный процесс для каждой вкладки. Клинг обещает это исправить.
  • LibWeb. Компонент появился в 2019 году под названием LibHTML. Это веб-движок с поддержкой нескольких стандартов: HTML, DOM, CSS, SVG и так далее. Компонент на уровне Platform проводит инъекцию вспомогательного кода Qt для циклов событий, таймеров, настроек системных шрифтов и прочего.
  • LibJS. Компонент впервые появился через 9 месяцев после LibHTML, в 2020 году; процесс написания первых версий записан в видеоролике. LibJS отведены обработка ECMAScript, среды выполнения JavaScript и сборка мусора.

    В Ladybird нет и не предвидится JIT-компилятора для JavaScript, браузер построен на традиционном интерпретаторе с деревом асбтрактного синтаксиса. Клинг говорит, что не хочет связываться со сложностями безопасности динамической компиляции, поэтому постарается выжать максимум возможного из технологий без JIT.

  • LibGfx. Отображение двумерной графики, текста и форматов картинок (PNG, JPG, GIF и другие).
  • LibRegex. Движок регулярных выражений.
  • LibXML. Парсер XML.
  • LibWasm. Парсер и интерпретатор WebAssembly.
  • LibUnicode. Библиотека поддержки Юникода.
  • LibTextCodec. Библиотека конвертации кодировки текста.
  • LibMarkdown. Парсер Markdown.
  • LibCore. Различные вспомогательные функции: ввод-вывод, время и дата, MIME и так далее.
  • Qt. Работа кроссплатформенных элементов графического интерфейса. Поскольку мультипоточная система RequestServer за пределами SerenityOS ещё не готова, проект Ladybird полагается на Qt для работы с сетью.


Клинг оценивает, что до основного браузера Ladybird ещё далеко, проект «сыроват» и находится на ранних стадиях развития. Конечно, Ladybird проходит тест Acid3 (самую новую версию) на 100 баллов из 100. Тем не менее для реального использования этого мало: Acid3 содержит лишь базовые функции CSS и разнообразные интерфейсы DOM/HTML, но не популярные в современном вебе flexbox или CSS grid.

Пусть Ladybird и улучшается от версии к версии, у проекта много проблем совместимости. Клинг не обещает никаких конкретных сроков готовности браузера. По оценке автора проекта, на доведение продукта до адекватного состояния могут уйти годы. Разработчик настроен оптимистично и не разделяет точку зрения, что для написания ещё одного браузерного движка нужны миллиарды долларов и сотни программистов.

xv5eoruv70dlg47ztkut7eyya-w.png
Подреддит /r/programming в браузере Ladybird сейчас открывается, но выглядит некорректно. awesomekling.github.io

На данный момент Ladybird работает в Linux, macOS, Windows (через прокладку Windows Subsystem for Linux) и Android. Он постепенно появляется среди пакетов многих дистрибутивов, например, Ladybird уже присутствует в Arch Linux. Самая зрелая и протестированная версия — это версия для Linux. Библиотеки для работы браузера заимствованы из SerenityOS, в единое целое их соединяет Qt. В теории браузер может работать везде, где работает Qt, и за счёт этого достигать высокой портируемости.

Код браузера публикуется под свободной лицензией. Клинг говорит, что изменить курс разработки деньгами невозможно. Вместо этого разработчик предлагает помочь проекту коммитами, баг-репортами или профинансировать свой труд и труд Линуса Гроха и Сэма Аткинсона — других разработчиков, которые пишут компоненты браузера.

Сам Клинг с 2021 года живёт за счёт пожертвований, которые получает в рамках работы над SerenityOS и другими проектами. SerenityOS — UNIX-подобная операционная система, которую с 2018 года создаёт Андреас Клинг и сотни других участников. Браузер Ladybird не построен на уже существующем браузерном движке; SerenityOS также написана практически с нуля и не является ещё одним дистрибутивом Linux.

Репозиторий Ladybird

© Habrahabr.ru