Global Rolling Updater current (GRU) — это система автоматического обновления, набор спецификаций и общие принципы развёртывания. Известным проектом, использующим GRU, является Tor Portable.
- Программа, придерживающаяся GRU, хранит себя через архив по постоянной ссылке. Форматы архивов для GRU должны быть широкоизвестными и кроссплатформенными, вроде .zip. В зависимости от конкретной реализации способ не утратить ссылку может быть различным, одним из них является сохранение названия архива без изменений (IPNS).
- Текущая версия программы должна быть указана через специальный файл (назовём его VERSION_1.0) внутри архива и в директории с архивами. Строго запрещено добавлять пробелы в имя этого файла чтобы не препятствовать парсингу; также на парсинг может оказать влияние его пустота против наличия информации внутри. Реализовано автообновление по принципу сравнения файла VERSION внутри архива и в веб директории с архивами — его можно добавить в код любой программы, и оно свяжется с основным апдейтером. Мы обязаны убедиться в защите от цензора проверкой доступности специального файла (пример). Простого ping недостаточно.
- Программа, размещённая по системе GRU, не хранит историю версий по актуальной ссылке, вместо этого всегда указывая на последнюю из них. Это делает удобным сокрытие предыдущих версий и невозможным их случайное скачивание. В случае с IPNS предыдущие версии могут сохраниться в файловой системе.
- Само обновление происходит по схеме: 1) перевод директории на текущую; 2) проверка доступности тестового файла и прерывание обновления, если оно отсутствует; 3) удаление всех файлов и директорий в папке с копированием пользовательских; 4) скачивание архива; 5) распаковка архива; 6) удаление архива и всех временных файлов. Реализации на Windows и Linux отличаются: Linux хранит исполняемый скрипт в оперативной памяти и делает возможным его горячее удаление, в отличие от Windows. Поэтому на Windows необходимо создание нескольких параллельно запускающихся скриптов.
- На Linux эталонным детерменированным развёртыванием является использование портативных библиотек через
./ld-linux-x86-64.so.2 --library-path ., что позволяет запускаться любым программам в идентичной среде, независимо от дистрибутива. GRU допускает молниеносные обновления как самой программы, так и портативных библиотек, их необходимо использовать ради унификации пользовательского опыта при потребности.
На этом описание спецификаций GRU current закончено.
- Универсальность. Не требуется установки никаких отдельных программ для соблюдения всех спецификаций. Принципы системы могут быть совместимы со множеством файловых хранилищ (проверены IPNS и Dropbox). Для работы IPNS требуется использование republisher вместе с портативной версией Kubo, Dropbox — изменение параметра с dl=0 на dl=1; IPNS не имеет скрытой цензуры, устойчив к цензуре, позволяет откаты и является открытым исходным кодом, Dropbox может быть проще в конфигурировании.
- Заложенный в архитектуру rolling-release гарантирует, что пользователь получит только последнюю версию приложения, избегая устаревающих ссылок.
- Поддержка обновлений начиная с Windows 7 и на любых Linux системах. Любой файл обновления имеет крайне небольшой размер и при этом генерирует уже распакованную программу по щелчку, что позволяет избегать ограничений на передачу файлов большого размера.
- Сохранение битов исполнения и любых метаданных в распакованных файлах, в отличие от, например, git-clone.
- Возможность передачи любых видов информации, включая постоянно пополняемых коллекций изображений и музыки.