Насчёт организации дерева программ, тут тоже отдельная тема.
Моё мнение:
- есть сайт, например, host.ru, на нём расположено само "дерево": portage.host.ru
- Есть 3 группы (ветки)
- /pub/ - группа, куда пользователи могут выкладывать свои творения. В эту папку исходники добавляются, допустим, через веб-форму на сайте.
- /testing/ - в эту группу исходники/программы попадают после проверки модератором кода. В специальном разделе сайта можно оставлять комментарии к программе.
- /main/ - в эту группу программы попадают, когда они наберут достаточное количество положительных голосов в разделе тестирования.
- В каждой группе есть следующие файлы:
- /Sources - список всех файлов-исходников
- /Sources.Translations - список различных переводов описаний
- /Sources.Info-locale - сами описания, где locale - язык (ru, en, de, etc.) Если на каком-то языке для какой-либо программы описания нет, то оно берётся из следующего в списке языка (список формирует сам пользователь в настройках).
- /Source/*-vX.Y.7z - сами исходники (X.Y - версия). Пример - 'image-compare-v1.0.7z'
- Каждый архив, помимо исходников, содержит мини-инструкцию по сборке: что скомпилить, что подключить, что куда скопировать и какие ярлыки создать. Подойдёт формат Ini или Inf.
- /Source/*-vX.Y-patch-Z.7z - патчи (Z - "номер" и краткое описание исправления) Пример - 'image-compare-v1.0-patch-png-1.7z'
- Тут уже скорее XML, с указанием, где что вырезать/вставить/заменить.
- /Binary, /Binary.Translations, /Binary.Info-* - то же самое, но для уже скомпилированных программ.
- /Binary/*-vX.Y.7z - запакованный установщик.
Ага, и кстати, для всех файлов - ещё один файлик
file_name.ext.summ, в котором содержатся 3-4 строчки с "суммами" (MD5, CRC32, SHA256, etc.)