Представен е проект rars, развиващ свободна реализация на инструменти за формата RAR, написан на езика Rust и поддържащ не само разархивиране, но и създаване на RAR-архиви. Инструменти за работа с как ранните формати RAR 1.3/1.4 с подпис «RE~^», така и последната версия RAR 7. Достъпни са разширени операции като поделяне на томове, защита с парола, криптиране на заглавия, добавяне на коментари, RARVM-филтри, индекси за бързо отваряне и механизми за възстановяване на повредени данни. Кодът се разпространява под лицензите MIT и Apache-2.0. На базата на библиотеката PyO3 са подготвени обвивки за езика Python, които реализират API в стил rarfile за преглед, тестване и извличане на архиви, както и API в стил RarBuilder за създаване или пренапаковане на архиви.
Спецификата на проекта е, че той реализира работа с формата RAR без използване на кода на утилитата unrar, разпространявана под несвободна лицензия, която забранява използването на кода unrar за възстановяване на алгоритъма на компресия RAR или разработка на RAR-съвместим архиватор. Поради това ограничение повечето свободни архиватори са били ограничени само с функции за разархивиране на RAR-файлове, а за създаване на RAR-архиви е трябвало да се използва собственически инструменти от RARLAB.
Отделно е създаден репозиториум rar-research, в който са публикувани спецификации за форматите RAR 1.3/1.4, RAR 1.5-4.x и RAR 5.0/7.0, както и бележки за използваните алгоритми, филтри, методи за проверка и възстановяване на целостта, криптиране, разделяне на томове и механизми за защита. Тъй като в момента на създаването на проекта rars не е съществувала официална пълна спецификация, документацията е възстановена по кода на разархиватори, стари реализации, тестови архиви и анализ на бинарни версии на RAR за DOS и Windows.
Реализацията е създадена с помощта на AI инструменти OpenAI Codex 5.5 и Claude Opus 4.7 в свободното време около пет седмици. В началния етап моделите са били използвани за систематизиране на информация за формата и запълване на пропуските в описанието, след което по възстановената спецификация е бил генериран код на езика Rust. За уточняване на спецификацията и усъвършенстване на реализацията е била използвана проверка на работата с реални архиви и сравнение с еталонни реализации.
Отбелязва се, че AI инструментите успешно преминаха от формално описание към код и рутинно реализираха голям обем функционалности, но не успяха да осигурят архитектурен контрол. Без строг надзор AI моделите имаха склонност да заобикалят тестовете, усложняваха кода и пропускаха очевидни проблеми, влияещи на удобството при работа. Според оценката на автора, в проект от такъв мащаб тестовете, документацията и коментарите се оказаха не само инструменти за проверка, но и начин за насочване на генерирането на код в нужната посока.
Разработването беше ускорено след появата на режима "\/goal" в OpenAI Codex, позволяващ на AI агента да работи дълго време по една задача, съкращавайки контекста и продължавайки след препълване. В този режим Codex няколко пъти работи повече от 6 часа и един път около 16 часа, реализирайки значителна част от оставащата функционалност, като възстановяване на данни, криптиране и многотомни архиви. С оглед на значителната субсидия за токени, бяха похарчени 40 британски лири.
По ниво на компресия rars в средностатистическият случай изостава с 5-10% от WinRAR. По отношение на скоростта на компресия и разархивиране rars е значително по-бавен от WinRAR поради липсата на пълноценни оптимизации. В проекта вече съществува режим "—features fast", който прилага оптимизации на базата на SIMD инструкции за ускоряване на компресията и разархивирането, но е свързан с експериментален API std::simd, наличен само в тестови версии на Rust инструмента. Осъществен е също режим "—features parallel", използващ библиотеката Rayon за разпаралеляване на компресията на отделни файлове.
Евгений Рошал, създателят на RAR, коментира употребата на обратна инженерия на стари бинарни файлове RAR при разработката на rars, което е забранено от лицензионното споразумение. Според Евгений, той все още не е решил какво да прави с това и възнамерява да изчака мнението на компанията win.rar GmbH.
Източник: opennet.ru
