From fb8ddbbf803ba3209424df4682de80255adeb110 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Thu, 18 Apr 2019 16:31:42 -0500 Subject: Why time based releases? (About the first half of it, anyway.) --- www/faq.html | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/www/faq.html b/www/faq.html index c5709eff..37ab9157 100755 --- a/www/faq.html +++ b/www/faq.html @@ -5,6 +5,7 @@
  • Do you capitalize toybox?

  • Why toybox? (What was wrong with busybox?)

  • Why a 7 year support horizon?

  • +
  • Why time based releases?

  • Where do I start understanding the toybox source code?

  • @@ -101,9 +102,52 @@ for it and let the functionality cleanly drop out. I also keep old Ubuntu images around in VMs and perform the occasional defconfig build there to see what breaks.

    -

    Where do I start understanding the source code?

    - -

    Toybox is written in C. There are longer writeups of the +

    Q: Why time based releases?

    +

    A: Toybox targets quarterly releases (a similar schedule to the Linux +kernel) because Martin Michlmayr's +talk on the +subject was convincing.

    + +

    Releases provide synchronization points where the developers certify +"it worked for me". Each release is a known version with predictable behavior, +and right or wrong at least everyone should be seeing +similar results where you might be able to google an unexpected outcome. +Releases focus end-user testing on specific versions +where issues can be reproduced, diagnosed, and fixed. +Releases also force the developers to do periodic tidying, packaging, +documentation review, finish up partially implemented features languishing +in their private trees, and give regular checkpoints to measure progress.

    + +

    Over time feature sets change, data formats change, control knobs change... +For example toybox's switch from "ls -q" to "ls -b" as the default output +format wasn't exactly a bug, it was a design improvement... but the +difference is academic if the change breaks somebody's script. +Releases give you the option to schedule upgrades later, and not to rock +the boat just now: just use a known working release version.

    + +

    The counter-argument is that "continuous integration" +can be made robust with sufficient automated testing. But like the +waterfall method, this places insufficent +emphasis on end-user feedback and learning from real world experience. +Developer testing is either testing that the code does what the developers +expect given expected inputs running in an expected environment, or it's +regression testing against bugs previously found in the field. No plan +survives contact with the enemy, and technology always breaks once it +leaves the lab and encounters real world data and use cases, not just +at runtime but in different build environments.

    + +

    The best way to give new users a reasonable first experience is to point +them at specific stable versions where development quiesced and +extra testing occurred. There will still be teething troubles, but multiple +people experiencing the _same_ teething troubles can potentially +help each other out.

    + +

    As for why releases on a schedule are better than releases "when it's +ready", watch the video.

    + +

    Q: Where do I start understanding the source code?

    + +

    A: Toybox is written in C. There are longer writeups of the design ideas and a code walkthrough, and the about page summarizes what we're trying to accomplish, but here's a quick start:

    -- cgit v1.2.3