Новая версия BitTorrent-клиента Transmission 4.0.0, перешедшего с Си на Си++

После почти трёх лет разработки опубликован релиз Transmission 4.0.0, относительно лёгкого и нетребовательного к ресурсам BitTorrent-клиента, написанного на языке Cи и поддерживающего разнообразные интерфейсы пользователя: GTK, Qt, native Mac, Web-интерфейс, daemon, CLI. Код распространяется под лицензиями GPLv2 и GPLv3.

Ключевым изменением в новой ветке стал перевод кодовой базы с языка Си (C90) на Си++. Ранее на С++ был написан только интерфейс на базе Qt. Основной причиной перехода всего проекта на C++ называется желание задействовать дополнительные возможности, предоставляемые в стандартной библиотеке C++, и наличие в С++ более продвинутых средств для проверки типов. GTK-интерфейс переведён на использование gtkmm, обвязки над GTK для языка C++.

Попутно проведён значительный рефакторинг кодовой базы, позволивший сократить размер кода на 18%, улучшить охват тестами и упростить сопровождение. Модернизирован процесс взаимодействия с сообществом, реализовано более активное реагирование на сообщения об ошибках и передачу изменений через pull-запросы. Осуществлён переход на семантическое версионирование при назначении номеров версий, подразумевающее использование нотации X.Y.Z (вместо ранее используемой X.NN), в которой X меняется при внесении изменений, нарушающих обратную совместимость, Y меняется при расширении функциональности и Z при исправлении ошибок.

Другие изменения:

  • Добавлена поддержка использования торрентов в формате BitTorrent v2 и гибридных торрентов (пока только использование готовых торрентов, возможность создания торрентов на базе BitTorrent 2 появится в одном из следующих выпусков). В BitTorrent v2, осуществлён уход от использования алгоритма SHA-1 в пользу SHA2-256, который применяется как для контроля целостности блоков данных, так и для записей в индексах (info-dictionary), что нарушает совместимость с DHT и трекерами. Для сокращения размера torrent-файлов и проверки загруженных данных на уровне блоков индексы переведены на использование хеш-дерева Меркла. Добавлена возможность привязки отдельных хэш-деревьев к каждому файлу и выравнивания файлов по частям (без добавления добавочного заполнения после каждого файла), что позволило избавиться от дублирования данных при наличии одинаковых файлов и упростило выявления разных источников для файлов. Повышена эффективность кодирования структуры каталогов в торренте и добавлены оптимизации для обработки большого числа мелких файлов.
  • Web-интерфейс переписан с использованием более современных методов разработки на JavaScript и адаптирован для использования на мобильных устройствах. Код избавлен от применения библиотеки jQuery. В сжатом виде Web-интерфейс теперь занимает всего 68 КБ.
  • Значительно повышена эффективность работы - тестирование запуска transmission-daemon с 25 тысячами торрентов показало снижение нагрузки на CPU на 50% и уменьшение потребление памяти на 70%, по сравнению с Transmission 3.00.
  • Взаимодействие фонового процесса с GUI-фронтэндами (transmission-qt и transmission-web) переведено на RPC, работающий в табличном режиме, что позволило уменьшить размер передаваемых данных и снизить требования к пропускной способности. Для сжатия данных, передаваемых через RPC, вместо zlib задействована более оптимизированная библиотека libdeflate.
  • Пользователю предоставлена возможность выставления трекеров по умолчанию, которые могут использоваться для анонсирования всех публичных торрентов.
  • Обеспечен мгновенный запуск только что добавленных сидов с выполнением операций проверки по мере необходимости (без выполнения полной проверки перед запуском).
  • Добавлена опция для исключения при создании новых торрентов информации, которая потенциально может использоваться для косвенной идентификации пользователя (например, дата создания и User-Agent).
  • Добавлена поддержка чёрного списка для IPv6.
  • Система unit-тестирования переведена на использование Google Test. Обеспечен запуск в системе непрерывной интеграции сборок на базе Clang Выполнено fuzzing-тестирование базовой библиотеки. Реализован процесс проверки нового кода в статических анализаторах Sonarcloud, Coverity, LGTM и clang-tidy.
1212
7 комментариев

позовите когда на расте перепишут

Сначала на Go, потом на Rust. Всему своё время.

В роутерах от Кинетика тоже обновят? Интересно.

блин, я у себя в арче что то удалил из пайтонского pip и теперь у меня ни один битторрент клиент кроме rtorrent не работает. И я этому рад был бы, если б понимал как в нем качать отдельные файлы из одной раздачи, а не все