for each module we want a module definition file, module.cfg [module] name = pkg1 version = 0.1.0 allow_unsafe = true plugin_for = mainpkg1:plugin_v1 internal_for = friendpkg1 minimum_int_bits = 32 minimum_size_bits = 32 [metadata] website = https://xxx author = yyy [updates] dl_url = https://xxx dl_url_format = .tar.zst (or MIME type?) dl_url_signkey = base64:MID343SDF2f4sdff23Sf42ds3423...sdFDf= dl_check_url = https://xxx dl_check_pattern = /latest version: (.*)/\1/ dl_check_signkey = key1 repo_url = https://xxxx/xxx.git repo_type = git repo_release_pattern = /v(.*)/ repo_release_replace = /-/./ repo_release_signkey = key1 [keys] key1 = base64:MID343SDF2f4sdff23Sf42ds3423...sdFDf= [dependencies] pkg1 = least:0.5.3 pkg2 meta_pkg1 [build_dependencies] pkg3 = least:1.2.0 [run_dependencies] pkg4 pkg5 = optional [broken_dependencies] pkg2 = range:0.1.2.1:0.1.2.5,0.1.3.0 there should be this standard file/directory structure. only the module.cfg file, and at least one of (asm, data, dev-doc, doc, src, test), are required. asm/ (if allow_unsafe is true) asm/x86_64-linux-gnu/*.cfg (assembler options, e.g. syntax. default.cfg for defaults) asm/x86_64-linux-gnu/*.asm (for example) data/ dev-doc/ doc/ plugin-interface/ src/ test/data/ test/unit/**.sul test/system/**.sul test/exec/**.cfg README module.cfg interface.sul (for libraries) building should store files in a local cache directory (perhaps tmpfs, or rarely synced-to-disk partition) modules are installed into these directories: /sys/exe/arch/ /sys/lib/arch/ /sys/lib/arch/other_pkgname/pluginapiname/ /sys/data/res/pkgname/ /sys/data/doc/pkgname/ /sys/data/src/dev-doc/pkgname/ /sys/data/src/dev-interface/ /sys/data/src/dev-plugin/pkgname/ builtin-software is installed in a special parition, which is updated as a disk image (with reproducible bindiff/"fsdiff" commands) with A/B partitions on top of this, the other directories are overlaid additionally, there are these runtime directories /sys/cache/ /sys/cfg/pkgname/ /user/username/ by default, an app can see these directories /sys/lib/arch/pkgname/pluginapiname/ (as /app/plugins/) /sys/data/res/pkgname/ (as /app/res/) /sys/data/doc/pkgname/ (as /app/doc/)