È stato presentato il progetto rars, che sviluppa un'implementazione libera di strumenti per il formato RAR, scritta in Rust e che supporta non solo l'estrazione, ma anche la creazione di archivi RAR. Gli strumenti supportano sia i formati RAR 1.3/1.4 con la firma «RE~^», sia l'ultima versione RAR 7. Sono disponibili operazioni avanzate come la suddivisione in volumi, la protezione con password, la crittografia degli header, l'aggiunta di commenti, filtri RARVM, indici per l'apertura rapida e meccanismi di recupero dei dati danneggiati. Il codice è distribuito con licenze MIT e Apache-2.0. Sulla base della libreria PyO3 sono stati preparati dei wrapper per il linguaggio Python, che implementano un'API in stile rarfile per visualizzare, testare ed estrarre archivi, oltre a un'API in stile RarBuilder per creare o ripacchettare archivi.
La particolarità del progetto è che implementa il lavoro con il formato RAR senza utilizzare il codice dell'utility unrar, distribuita con una licenza non libera, che proibisce l'uso del codice unrar per ricreare l'algoritmo di compressione RAR o sviluppare un archiviatore compatibile con RAR. A causa di questa limitazione, la maggior parte degli archivi liberi si è limitata solo alle funzioni di estrazione dei file RAR, e per creare archivi RAR era necessario utilizzare strumenti proprietari di RARLAB.
È stato creato un repository separato chiamato rar-research, dove sono state pubblicate le specifiche per i formati RAR 1.3/1.4, RAR 1.5-4.x e RAR 5.0/7.0, oltre a note sugli algoritmi utilizzati, sui filtri, sui metodi di verifica e recupero dell'integrità, sulla crittografia, sulla suddivisione in volumi e sui meccanismi di protezione. Poiché al momento della creazione del progetto rars non esisteva una specifica ufficiale completa, la documentazione è stata ricreata basandosi sul codice degli estrattori, sulle vecchie implementazioni, sugli archivi di prova e sull'analisi delle versioni binarie di RAR per DOS e Windows.
L'implementazione è stata creata utilizzando strumenti AI come OpenAI Codex 5.5 e Claude Opus 4.7 nel tempo libero, in un periodo di circa cinque settimane. Nella prima fase, i modelli sono stati utilizzati per sistematizzare le informazioni riguardanti il formato e colmare le lacune nella descrizione, dopodiché, sulla base della specifica ricostruita, è stato generato codice nel linguaggio Rust. Per affinare la specifica e migliorare l'implementazione, è stato utilizzato un controllo su archivi reali e un confronto con implementazioni di riferimento.
Si osserva che gli strumenti AI hanno gestito bene il trasferimento di descrizioni formali in codice e l'implementazione routine di un vasto volume di funzionalità, ma non sono riusciti a garantire un controllo architettonico. Senza una supervisione rigorosa, i modelli AI tendevano a aggirare i test, complicare il codice e omettere problemi evidenti che influenzano la facilità d'uso. Secondo quanto valutato dall'autore, in un progetto di tale portata, test, documentazione e commenti sono diventati non solo strumenti di verifica, ma anche un modo per indirizzare la generazione di codice nella direzione giusta.
Il progresso nello sviluppo è stato possibile grazie all'emergere della modalità «/goal» di OpenAI Codex, che consente all'agente AI di lavorare a lungo su un compito, comprimendo il contesto e continuando l'esecuzione dopo il suo riempimento. In questa modalità, Codex ha lavorato più di 6 ore in diverse occasioni e una volta per circa 16 ore, realizzando una parte significativa delle funzionalità rimaste, come il recupero dei dati, la crittografia e gli archivi multivolume. In considerazione del notevole sussidio per i token, sono stati spesi 40 sterline.
Per quanto riguarda il livello di compressione, rars è in media inferiore del 5-10% rispetto a WinRAR. Per quanto riguarda la velocità di compressione e decompressione, rars è significativamente più lento di WinRAR a causa dell'assenza di ottimizzazioni complete. Tuttavia, il progetto ha già una modalità «--features fast», che applica ottimizzazioni basate su istruzioni SIMD per accelerare la compressione e la decompressione, ma legata a un'API sperimentale std::simd, disponibile solo nelle versioni di test degli strumenti Rust. È stata inoltre implementata una modalità «--features parallel», che utilizza la libreria Rayon per parallelizzare la compressione dei singoli file.
Evgeny Roshall, creatore di RAR, ha commentato l'uso dell'ingegneria inversa su vecchi file binari RAR durante lo sviluppo di rars, il che è vietato dall'accordo di licenza. Secondo Evgeny, non ha ancora deciso cosa fare al riguardo e intende aspettare l'opinione della società win.rar GmbH.
Fonte: opennet.ru
