What 2.9 and 3.0 need before they ship
2.8.1 is through review and waiting on the clean-machine install test. This is a good moment to write down what the next two versions actually need, because the list has changed twice since spring and the reasons matter more than the order.
2.9: the Gecko line becomes honest
The Gecko-family preview shipped in 2.8.0 with one limitation we should not have accepted: no incremental builds. Today every bep build on a Gecko tree reconfigures and rebuilds from scratch, which costs 25 to 40 minutes. Extension developers who test against that engine are spending most of their day waiting.
The problem is not the patch pipeline. It is that the source tree's build entry point does not preserve enough state for a second run to reuse. The plan is to keep the configure step and the object directory outside out/, keyed by the same content hash the cache already uses, and to pass the tree an explicit output directory instead of letting it choose one. That is a small change to our wrapper and a large change to how we test it: every Gecko build in CI will run twice, and the second run must take under eight minutes or the release does not go out.
Alongside that, bep cache gc gets a background mode. With 200 GB of objects the current walk takes several minutes and blocks the terminal; a child process that writes a report to the cache root is enough. No daemon, no schedule, no automatic deletion: a build tool that removes files on its own is a build tool you cannot trust with a slow disk.
3.0: two features that need a major number
A search index over the documentation is the most requested thing we do not have, and it cannot be done without a build step on the site: the pages are static files served as they are, and shipping a client-side index means shipping a search script. We have been avoiding that on principle, since the whole site works without JavaScript today. The compromise for 3.0 is a small prebuilt index (about 40 KB for the whole manual) and a search box that degrades to the table of contents when scripting is off. If it cannot degrade cleanly, it does not ship.
Versioned documentation is the second. Right now 2.8.1 pages replace 2.7 pages at the same addresses, which is fine for a project with one supported line and wrong for a project that supports two. The plan is a directory per minor line and a banner on every page that is not current, with the old pages frozen at the release they describe. This also changes how the docs are built: each page will name its version in the source, and the build will refuse to publish a page whose version does not match the directory it lands in.
What is not planned
- A plugin system. The patch catalogue is a directory of text files; anybody can fork it. A plugin API would add a versioning problem without adding a capability.
- A GUI. Two attempts inside the studio produced a window that showed the same log the terminal already showed.
- Prebuilt binaries. The build takes 90 seconds on a modest machine, and a binary you did not compile is a bad first step for a tool that patches compilers' inputs.
- Automatic upstream tracking. Deciding when to move the pinned revision is a judgement call about the patches you carry, not a schedule.
How the dates are made
Not by counting weeks. A version ships when the checklist for its line is empty: each item has a test, the test runs on three machines, and the install page has been followed on a clean virtual machine by someone who did not write the change. 2.9 is a November target and 3.0 a first-quarter target; if either slips, the release notes will say which item held it, the way the 2.8.1 notes name the two issues that were closed late.
Feedback that changes this list
Two kinds of report move an item up. A reproducible failure with a command and a log goes to the top of the queue automatically, because it means the tool is wrong in a way we can see. A request with a described workflow — “I build four series a day and the third one refetches” — is worth more than a vote count, because it tells us which part of the loop hurts. The community page says where to send both.