Релиз IM клиента Pidgin 3.0 Experimental 1 (pre alpha release 2.90.0)

от автора

1 января 2025 года ведущий разработчик проекта Гэри Крамлих опубликовал первую тестовую релизную сборку IM клиента Pidgin 3.0 Experimental 1 (это предварительный альфа-релиз с официальным номером версии 2.90.0, который доступен для скачивания). История создания этого мультипротокольного клиента для сетей мгновенных сообщений продолжается уже 25 лет.

Мы с восторгом сообщаем, что выпустили первую экспериментальную версию Pidgin 3.0!!! Это предварительный альфа-релиз с официальным номером версии 2.90.0. Мы продолжим выпускать проект в таком режиме, пока не будем готовы к версии 3.0.0, которая будет считаться готовой для конечных пользователей. Этот выпуск стал кульминацией многих лет работы и большого количества изменений. Идеи этой версии появились в 2008 году, но фактически она стала новой веткой проекта в 2011 году, насколько мы можем судить и помнить.

Это знаменательный релиз, но он не предназначен для конечных пользователей. Большинство вещей не реализовано, пользовательский интерфейс вообще не отполирован, и там есть много ошибок. Заглядывая вперед, мы надеемся делать ежеквартальные экспериментальные релизы, а Experimental 2 запланирован на 2025-03-31. Этот релиз, скорее всего, будет иметь номер версии 2.91.0, но за это время все может измениться.

Мы также работаем над тем, чтобы разместить этот релиз на Flathub beta, но из-за некоторых проблем с инфраструктурой, которые у них возникли, это произойдет не раньше конца этой недели.

Команда проекта пояснила, почему разработка новых версий Pidgin идёт так долго. Крамлих взял на себя проект в январе 2016 года, думая, что он закончит версию 3.0 к концу 2016 года. Он продвигал GObjectification, который в итоге был почти полностью реализован, но застопорился. Крамлих считал, что это привело к замедлению проекта. В итоге девять лет спустя Крамлих остаётся лидером проекта и наконец-то выпустил предварительную альфа-версию.

Оказалось, что с 2016 года производительность команды разработчиков сильно упала. Участники приходили и уходили, в проекте ценят всю работу, которую они проделали для проекта.

«Хотя мы и потеряли одного участника из‑за некоторых смягчающих обстоятельств. Он переехал в США по визе H-1B, и компания, в которой он работал, решила, что ему не нравится юридическая серая зона, которую создала часть нашего кода протокола. Это означало, что участник больше не мог вносить свой вклад, и он нашел себе другое занятие в свободное время. Из‑за этого мы ввели новую политику, согласно которой в нашем основном репозитории кода разрешены только протоколы с открытым исходным кодом/открытой спецификацией», — уточнили в команде проекта.

Основной идеей для Pidgin 3 было использование системы типов GObject, которая включена в GLib, которую в проекте уже широко использовали. Это дало бы команде лучшие и более проверенные типы и сигналы, чем те, которые у них были, а также дало бы разработчикам подсчет ссылок, в котором оеи отчаянно нуждались. Внутри команды разработчики называли это решение «GObjectification».

Одной из проблем миграции текущего решения для новой ветки были сигналы (signals). В Purple 2 и более ранних версиях сигналы были основаны на классах. Это означало, что нужно подключаться только к одному сигналу, чтобы получить уведомление. Примером этого является выяснение того, когда было написано новое сообщение в любой беседе. Это сильно отличается от сигналов GObject, которые основаны на экземплярах, что означает, что пользователю нужно подключиться к каждому экземпляру, чтобы получить этот сигнал.

«Мы потратили довольно много времени на эту проблему. Крамлих даже написал proof of concept, используя некий низкоуровневый API GObject, и отправил его GLib, чтобы смержить решение. Однако разработчикам GLib не понравилась эта идея, и они отклонили этот pull request из соображений производительности», — рассказали в команде проекта.

Этот отказ откинул команду обратно к началу, пока разработчики не придумали идею «объектов‑менеджеров» (manager objects). Крамлих подробно написал об этом в своем сообщении в блоге From Sub‑Systems to Managers, но вкратце это так: теперь у проекта есть объекты‑менеджеры, которые содержат коллекцию объектов и распространяют сигналы этих объектов, что решает проблему с небольшими накладными расходами.

Изначально Pidgin 3 поддерживал как GTK+ 2, так и GTK+ 3, но вскоре после того, как Крамлих занялся продвижением проекта, поддержка GTK+ 2 была прекращена. Несколько лет спустя было решено, что команде следует «просто стиснуть зубы» и перейти на GTK 4, поскольку GTK+ 3 больше не разрабатывался активно, что означало, что они просто занимались тем, что создавали технический долг. В рамках миграции на GTK 4 разработчики также подключили Adwaita, хотя проект не является официальным приложением GNOME.

В какой‑то момент в новой ветке разработчики использовали WebKit в качестве истории разговоров с намерением иметь возможность поддерживать темы Adium. Первоначальная работа для этого была проделана с использованием API WebKit1, который в конечном итоге был объявлен устаревшим и удалён из дистрибутивов Linux. В команде потратили некоторое время на изучение WebKit 2, но когда они обнаружили, что его нет на Windows, разработчики решили отказаться и от него.

После этого команда Pidgin начали создавать новую библиотеку для ввода, истории и дополнительных виджетов под названием Talkatu. Решение Talkatu позволило поэкспериментировать с виджетами и постепенно перенести их в Pidgin 3. Эта часть проекта была создана с намерением использовать в других чат‑клиентах, но объединение этого решения с libpurple сильно усложнило задачу, что разработчики в конечном итоге отказались от Talkatu и использовали извлеченные из него уроки напрямую в Pidgin 3.

«Но, безусловно, самой большой проблемой было то, что все API в Pidgin 2 и более ранних версиях были разработаны для протоколов чата AIM, ICQ, MSN и Y!M. Самая большая проблема здесь была в доставке и отображении сообщений. В старых протоколах чата вы не могли редактировать сообщения, реагировать на них, отвечать на них, удалять или создавать из них потоки. Поэтому большинство протоколов чата не могли идентифицировать конкретное сообщение. Из‑за этого, Pidgin 2 и более ранние версии просто отображали сообщение после его получения, а затем полностью забывали о нём. Это означает, что весь API проекта просто передавал это сообщение как строку bare string. Поэтому, чтобы даже начать работу с вышеупомянутыми функциями, всё, что касалось сообщений, должно было быть обновлено и переработано. Что в чат‑приложении, по сути, является всем», — уточнили разработчики.

В итоге команда проекта решила всё переделать, а не начинать с нуля, поскольку им казалось, что они смогут делать все итеративно и поддерживать проект в рабочем состоянии всё время. Однако со временем они поняли, что протоколы были, по сути, оказались безнадежным делом и уже в течение многих лет перестали дорабатываться, а всё программирование сокетов выполнялось с использованием интерфейса сокетов BSD, даже в Windows. В текущем виде GIO стал чем‑то, что включало абстракцию сокетов и потоки, построенные поверх, что упростило весь сетевой код. Это вызвало много перекосов в протоколах, и в сочетании с новыми интерфейсами, которые в команде проектировали для протоколов, разработчики подумали и решили, что лучше всего просто начать всё с нуля. Вот почему в настоящее время эксперементальная версия проекта поддерживает только IRCv3, но в ближайшем будущем там появится поддержка и других протоколов.

Основные доработки в pre alpha release Pidgin 2.90.0:

  • интернационализация проекта только начинается, всё, что нужно в проекте, отмечено для перевода, но там пока ничего не переведено;

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

  • система сборки была перенесена в meson;

  • многие вещи, которые были реализованы внутри, теперь выгружены в новые и существующие внешние библиотеки;

  • появилось новое руководство для участников на Instant Messaging Freedom Contributors Guide;

  • «мы никогда не перепишем ничего из этого на Rust», — уточнили разработчики.


ссылка на оригинал статьи https://habr.com/ru/articles/871146/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *