Description
This issue will serve as a roadmap of sorts, a kind of grouping of "accepted feature requests" generated by myself, Mosè, and other concerned parties. While BinaryBuilder.jl already does a fantastic job for many pieces of software, there are things that make it unnecessarily difficult to work with, or that limit it in some ways, and we should address these things as best we can.
BinaryBuilder.jl
1.0 should, in my mind, be ready to put virtually all other ways of compiling software out of business. It should work flawlessly for the Julia ecosystem, but also be usable for other groups as well. It should be feature-complete and well-tested, and have as few hidden performance or and usability warts as possible. We're a good ways toward fulfilling this vision, but I see the following areas as needing improvement before we can truly wash our hands and say that this area is solved:
Build Platform
- Bootstrapping is still a huge issue. For machines that can support it, we should allow emulation of targets within the build environment via
qemu-user-static
,wine
anddarling
.- To do this properly, we'll need a mechanism in BB to check if the user has already loaded the
binfmt_misc
kernel module and thedarling
kernel module, and prompt them to load it if not. - I'm as-yet unaware of any FreeBSD emulation software.
- To do this properly, we'll need a mechanism in BB to check if the user has already loaded the
- Auditing is slow; it should be parallelized. I'd like to see a workqueue/threadpool kind of approach.
- Feedback/logging from BB exists, but it's not great. It would be nice to have a structured output that can be consumed by tools after the fact, as well as a better categorization of feedback so that we can ignore certain classes of warnings more easily.
Build API
- We need the ability to produce multiple outputs from a single build, which will entail a small overhaul of the
build_tarballs()
API. I refer to this as theBuildMetadata
rework, and it is best summarized in this comment,
JLLs
- We need the ability to for JLLs to serve multiple "variants" of themselves. With the advent of
CompilePreferences
and Pkg hooks, it's possible this can be done by having debug versions of a package listed asdebug=true
tags in their platform objects, then doing a runtime lookup of a compiletime preference to see ifdebug
has been set totrue
and selecting those artifacts instead. - With
CompilePreferences
we could do away withOverrides.toml
and instead be much more flexible: we could have anoverrides
dict within the preferences itself that selectively overrides the paths of individual products.
Other
- We should continue to split out pieces of BB/BBB functionality into separate packages. The sandboxing and runner stuff would make a good package, IMO.
- Potential name:
Sandbox.jl
, with backing UserNS and Docker runners contained within it.
- Potential name:
This will be a living document and get updated as more good ideas come to the foreground.