Source Format Defined
Following quickly on the heels of yesterday’s announcement that the binary format has been defined, we’ve now implemented the initial version of our source format. The source format provides metadata on a package along with instructions on how to build the package.
The next step of course, is to implement the build tool, converting the source specification into a binary package that the end user can install. With our 2 formats defined, we can now go ahead and implement the build routines.

A YAML based format
Section titled “A YAML based format”The eagle-eyed among you will already see this is a derivation of the package.yml format I originally created
while at Solus. Minor adaptations to the format have been made to support multiple architectures
via the profiles key, and package splitting behaviour has now been grouped under a packages key to make
the structure more readable.
In package.yml, one would have to redefine subpackage summaries as a key in a list of the primary summary key,
such as:
rundeps: - primary-run-dep - dev: secondary-run-dep summary: - Some Summary - dev: Some different summaryWe’ve opted to group “Package Definition” behaviour into core structs, which are allowed to appear in the root-level package and subpackages:
summary: Top-level summary packages: - dev: summary: Different summary rundeps: Different rundepsMultiple architecture support
Section titled “Multiple architecture support”In keeping with the grouping behaviour, we’re baking multiple architecture configurations into the YML file. A common
issue encountered with the older format was how to handle emul32:
setup: | if [[ -z "${EMUL32BUILD}" ]]; then %configure --some-emul32-option else %configure fi
build: | %makeOur new approach is to group Build Definitions into the root level struct, which may then individually be overridden for each architecture. For example:
profiles: - ia32: setup: | %configure --some-emul32-option setup: | %configure
Differences
Section titled “Differences”As you can see it is highly similar to package.yml - which is a great format. However, with our tooling and aims being slightly different, it was time to reevaluate the spec and bolster it where appropriate. We’re happy to share our changes, but in the interest of not causing a conflict between the 2 variants, we’ll be calling ours “stone.yml”.
Our main motivation came from the tooling, which is written in the D language. With D we were able to create a strongly typed parser and explicit schema, and with a struct-based approach it made it more trivial to group similar definitions.
Other than that, we have the same notions with the format, intelligent automatic package splitting, ease of developer experience, etc.