tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pocket-guide-shipping-firefox.rst (23610B)


      1 Pocket Guide: Shipping Firefox
      2 ==============================
      3 
      4 *Estimated read time:* 15min
      5 
      6 
      7 Introduction
      8 ------------
      9 
     10 The purpose of this document is to provide a high level understanding of
     11 how Mozilla ships Firefox. With the intention of helping new Mozillians
     12 (and those who would like a refresher) understand the basics of our
     13 release process, tools, common terms, and mechanisms employed in
     14 shipping Firefox to our users. Often this document will introduce a
     15 concept, explain how it fits into the process, and then provide a link
     16 to learn more if interested.
     17 
     18 Repositories & Channels
     19 -----------------------
     20 
     21 Shipping Firefox follows a software release :ref:`train model <train model>`
     22 along 3 primary code branches; firefox-main (aka “f-m” or “m-c”),
     23 firefox-beta, and firefox-release. Each of these branches are updated within
     24 a defined cadence and built into one of our Firefox products which are released
     25 through what is commonly referred to as :ref:`Channels <channels>`:
     26 Firefox Nightly, Firefox Beta, and Firefox Release.
     27 
     28 `Firefox Nightly <https://whattrainisitnow.com/release/?version=nightly>`__ offers access
     29 to the latest feature work still under active development. Released every 12 hours with all
     30 the changes that have :ref:`landed <landing>` on firefox-main for Desktop and Android.
     31 
     32 Every `4 weeks <https://whattrainisitnow.com/calendar/>`__, we :ref:`merge <merge>` the code
     33 for Desktop and Android builds from firefox-main to the firefox-beta branch. New code or
     34 features can be added to firefox-beta outside of this 4 week cadence but are required to land
     35 on firefox-main before being :ref:`uplifted <uplift>` to firefox-beta.
     36 
     37 `Firefox Beta <https://whattrainisitnow.com/release/?version=beta>`__ is for developers and early
     38 adopters who want to see and test what’s coming next in Firefox. We ship new Desktop and Android
     39 Beta builds three times a week.
     40 
     41 .. note::
     42 
     43  The first and second beta builds of a new cycle are shipped to a
     44  subset of our Beta population. The full Beta population gets updated
     45  starting with Beta 3 only.
     46 
     47 .. note::
     48 
     49  **Firefox Developer Edition** is a separate Desktop-only product based on
     50  the firefox-beta branch and is specifically tailored for Web Developers.
     51 
     52 `Firefox Release <https://whattrainisitnow.com/release/?version=release>`__ is updated every 4 weeks
     53 when a given version reaches the end of its Beta cycle. This is the primary product we ship to end users.
     54 While a release is live, interim updates (dot releases) are used to ship important bug fixes prior to
     55 the next major release. These can happen on an as-needed basis when there is an important-enough
     56 :ref:`driver <dot release drivers>` to do so (such as a critical bug severely impairing the usability
     57 of the product for some users). In order to provide better predictability, there is also a planned
     58 dot release scheduled for two weeks after the initial go-live for less-critical fixes and other
     59 :ref:`ride-along fixes <ride alongs>` deemed low-risk enough to include.
     60 
     61 .. note::
     62  `Firefox ESR (Extended Support Release) <https://whattrainisitnow.com/release/?version=esr>`__ is
     63  a separate product intended for enterprise use. Major updates are rolled out once per year to maintain
     64  stability and predictability. ESR also contains a number of enterprise policy options not available on
     65  the standard Firefox Release channel. Minor updates are shipped in sync with the Firefox Release
     66  schedule and generally only contain security and select quality fixes.
     67 
     68 Further Reading/Useful links:
     69 
     70 -  `Firefox Trains <https://whattrainisitnow.com/>`__
     71 -  `Release Calendar <https://whattrainisitnow.com/calendar/>`__
     72 -  `Firefox Release Process <https://wiki.mozilla.org/Release_Management/Release_Process>`__
     73 -  `Firefox Delivery dashboard <https://mozilla.github.io/delivery-dashboard/>`__
     74 
     75 Landing Code and Shipping Features
     76 ----------------------------------
     77 
     78 Mozillians (those employed by MoCo and the broader community) land lots of code in
     79 the Mozilla repositories: fixes, enhancements, compatibility, new features, etc. which are
     80 managed by git. All code development is tracked in
     81 :ref:`Bugzilla <bugzilla>`, reviewed in :ref:`Phabricator <Phabricator>`, and then checked
     82 into the Firefox repository using :ref:`Lando <Lando>`.
     83 
     84 .. note::
     85 
     86  Some teams use separate :ref:`GitHub <github>` repositories during development but are
     87  still required to use Phabricator (tracked in Bugzilla) to check their code into the
     88  main Firefox git repository.
     89 
     90 The standard process for code to be delivered to our users is by ‘riding the trains’, meaning that
     91 it’s landed in firefox-main to ship in Nightly builds while it waits for the next Beta cycle to
     92 begin. After merging to Beta, the code stabilizes over a 4 week period (along with everything else
     93 that merged from firefox-main from that development cycle). At the end of the Beta cycle, a
     94 release candidate (:ref:`RC <rc>`) build is generated, tested thoroughly, and eventually is released
     95 as the next major version of Firefox.
     96 
     97 Further Reading/Useful links:
     98 
     99 -  `Phabricator and why we use it <https://wiki.mozilla.org/Phabricator>`__
    100 -  `Firefox Release Notes Process <https://wiki.mozilla.org/Release_Management/Release_Notes>`__
    101 -  `Firefox Release Notes Nomination <https://wiki.mozilla.org/Release_Management/Release_Notes_Nomination>`__
    102 
    103 An exception to this process...
    104 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    105 
    106 Not all code can simply wait for the normal train model to be included in a Firefox build.
    107 There are a variety of reasons for this; critical fixes, security concerns, stabilizing a feature
    108 that’s already in Beta, shipping high-priority features/enhancements faster, and so on.
    109 
    110 In these situations, an uplift can be requested to take a recent landing in firefox-main and
    111 merge specific bits to the Beta or Release repository outside the standard train model. After the
    112 request is made, :ref:`Release Management <release management>` will assess the potential risk and
    113 make a decision on whether it will be accepted or not.
    114 
    115 While uplifts are generally not the preferred way to ship new feature work, it is understood that there
    116 are times when business needs to do so justify the required effort. Our release process is designed to
    117 have the flexibility to accommodate these requests, though in general they need to be handled on a case
    118 by case basis to determine the suitability. Teams are encouraged to reach out to Release Management in
    119 the `#release-coordination` channel on Slack or `@relman` so their specific needs can be assessed.
    120 
    121 Factors that will need to be taken into account include:
    122 
    123 -  Size and scope of patches to be uplifted
    124 -  QA availability to test prior to shipping and during development
    125 -  Engineering resources to resolve any conflicts between different development branches
    126 -  String additions/changes which may impact available locales
    127 
    128 Further Reading/Useful links:
    129 
    130 -  `Patch uplifting rules <https://wiki.mozilla.org/Release_Management/Uplift_rules>`__
    131 -  `Requesting an uplift <https://wiki.mozilla.org/Release_Management/Requesting_an_Uplift>`__
    132 
    133 Ensuring build stability
    134 ~~~~~~~~~~~~~~~~~~~~~~~~
    135 
    136 Throughout the process of landing code in firefox-main to riding the trains to Firefox Release,
    137 there are many milestones and quality checkpoints from a variety of teams. This process is designed
    138 to ensure a quality and compelling product will be consistently delivered to our users with each new
    139 version. See below for a detailed list of those milestones.
    140 
    141 ===================================================== ================ ================= =======================================================================================
    142 Milestone                                             Week             Day of Week
    143 ----------------------------------------------------- ---------------- ----------------- ---------------------------------------------------------------------------------------
    144 QA Request & Feature technical documentation deadline Nightly W0       Friday            QA feature testing should be requested prior to the start of the Nightly cycle
    145 Merge Day                                             Nightly W1       Monday            Day 1 of the new Nightly Cycle
    146 Feature Complete Milestone                            Nightly W2       Friday            Last day to land risky patches and/or enable new features
    147 QA Test Plan approval due                             Nightly W2       Friday            Last day to provide QA with feature Test Plan sign-offs
    148 Nightly features Go/No-Go decisions                   Nightly W4       Wednesday
    149 Beta release notes draft                              Nightly W4       Wednesday
    150 Nightly soft code freeze start                        Nightly W4       Thursday          Stabilization period in preparation to merge to Beta
    151 QA pre-merge regression testing completed             Nightly W4       Friday
    152 String freeze                                         Nightly W4       Friday            Modification or deletion of strings exposed to the end-users is not allowed
    153 Merge Day                                             Beta W1          Monday            Day 1 of the new Beta cycle
    154 User affecting changes identified & provided to SUMO  Beta W1          Friday
    155 End of Early Beta & intended pref state deadline      Beta W2          Friday            Post-B6
    156 Pre-release sign off                                  Beta W3          Wednesday         Final round of QA testing prior to Release
    157 Go/No-Go for features riding train                    Beta W3          Friday
    158 Firefox RC week                                       Beta W4          Monday            Validating Release Candidate builds in preparation for the next Firefox Release
    159 Release Notes ready                                   Beta W4          Tuesday
    160 What’s new page ready                                 Beta W4          Wednesday
    161 Firefox go-live @ 6am PT                              Release W1       Tuesday           Day 1 of the new Firefox Release to 25% of Release users
    162 Firefox Release bump to 100%                          Release W1       Thursday          Increase deployment of new Firefox Release to 100% of Release users
    163 Scheduled dot release approval requests due           Release W2       Friday            All requests required by EOD
    164 Scheduled dot release go-live                         Release W3       Tuesday           By default, ships when ready. Specific time available upon request.
    165 ===================================================== ================ ================= =======================================================================================
    166 
    167 
    168 The Release Management team (aka “Relman”) monitors and enforces this process to protect the
    169 stability of Firefox. Each member of Relman rotates through end-to-end ownership of a given
    170 :ref:`release cycle <release cycle>`. The Relman owner of a cycle will focus on the overall release,
    171 blocker bugs, risks, backout rates, stability/crash reports, etc. Go here for a complete overview of
    172 the `Relman Release Process Checklist <https://wiki.mozilla.org/Release_Management/Release_Process_Checklist_Documentation>`__.
    173 
    174 .. note::
    175 
    176  While Relman continually monitors the overall health of each release, it is the responsibility
    177  of the engineering organization to ensure that the code they are landing is of high quality and the
    178  potential risks are understood. Every release has an assigned :ref:`Regression Engineering
    179  Owner <reo>` (REO) to ensure a decision is made about each regression reported in the release.
    180 
    181 Further Reading/Useful links:
    182 
    183 -  `Release Tracking Rules <https://wiki.mozilla.org/Release_Management/Tracking_rules>`__
    184 -  `Release Owners <https://wiki.mozilla.org/Release_Management/Release_owners>`__
    185 -  `Commonly used Bugzilla queries for all Channels <https://trainqueries.herokuapp.com/>`__
    186 
    187 Enabling/Disabling code (Prefs)
    188 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    189 
    190 Within Firefox we allow the ability to enable/disable bits of code or entire features using
    191 :ref:`Preferences <preferences>`. There are many reasons why this is useful. For example:
    192 
    193 -  Continual development over multiple release cycles without exposing partially-completed
    194   features to our users
    195 -  Provide the ability to quickly disable a feature if there is a problem found during the
    196   release process
    197 -  Control features which are experimental or not ready to be shown to a specific channel
    198   population (e.g. enabled for Beta but disabled for Release)
    199 -  A/B testing via :ref:`telemetry <telemetry>` experiments
    200 
    201 .. note::
    202 
    203  :ref:`Nimbus <nimbus>` Pref Rollout is a feature that allows Mozilla to change the state of a
    204  preference for a targeted set of users, without deploying an update to Firefox. This is
    205  especially useful when conducting experiments or a gradual rollout of high risk features
    206  to our Release population.
    207 
    208  A Pref Rollout can also be used to mitigate an incident, see `Incident Response Pref Flips <https://experimenter.info/desktop-incident-response>`__ for details.
    209 
    210 Further Reading/Useful links:
    211 
    212 -  `Mozilla preferences documentation <https://firefox-source-docs.mozilla.org/modules/libpref/index.html>`__
    213 -  `Nimbus documentation <https://experimenter.info/>`__
    214 
    215 Release & Feature QA
    216 ~~~~~~~~~~~~~~~~~~~~
    217 
    218 The Desktop Test Engineering team is responsible for testing all critical browser areas,
    219 core and new. Organized in two-week sprints its primary goals are:
    220 
    221 
    222 -  qualifying builds for release,
    223 -  new feature testing based on Jira request,
    224 -  smoke, functional, exploratory and other recurring testing activities conducted each release cycle,
    225 -  bug work (such as bug fix verification and investigation),
    226 -  various process improvement initiatives,
    227 -  and community engagement.
    228 
    229 
    230 Features that can have significant impact and/or pose risk to the code base should be
    231 nominated for QA support by the :ref:`feature owner <feature owner>` in its intended
    232 release by submitting a new request in Jira. This process is kicked off by filing a new
    233 Jira ticket `here <https://mozilla-hub.atlassian.net/jira/software/c/projects/QA/boards/261>`__
    234 (detailed steps in `How to file a QA
    235 request <https://docs.google.com/document/d/1oz1YyaaBI-oHUDsktWA-dLtX7WzhYqs7C121yOPKo2w/edit?usp=sharing>`__).
    236 These are due by the end of week 4 of the previous Nightly cycle in which the feature needs testing.
    237 
    238 Further Reading/Useful links:
    239 
    240 -  `DTE team overview <https://mozilla-hub.atlassian.net/wiki/spaces/FDPDT/pages/10617155/Desktop+Test+Engineering>`__
    241 -  `DTE feature testing process <https://docs.google.com/document/d/1AIgAs78HWAPA3ROOdHzVW8fwRqfj8mog0sutaxp3Xfw/edit?usp=sharing>`__
    242 -  `How to file a QA request <https://docs.google.com/document/d/1oz1YyaaBI-oHUDsktWA-dLtX7WzhYqs7C121yOPKo2w/edit?usp=sharing>`__
    243 
    244 Experiments
    245 ~~~~~~~~~~~
    246 
    247 As we deliver new features to our users, we continually ask ourselves about the potential impacts,
    248 both positive and negative. For many new features, we will run an experiment to gather data around
    249 these impacts. A simple definition of an experiment is a way to measure how a change to our product
    250 affects how people use it.
    251 
    252 An experiment has three parts:
    253 
    254 1. A new feature that can be selectively enabled
    255 2. A group of users to test the new feature
    256 3. Telemetry to measure how people interact with the new feature
    257 
    258 Experiments are managed by an in-house tool called `Experimenter <https://experimenter.services.mozilla.com/>`__.
    259 
    260 Further Reading/Useful links:
    261 
    262 -  `More about experiments and Experimenter <https://github.com/mozilla/experimenter>`__
    263 -  `Requesting a new Experiment <https://experimenter.services.mozilla.com/experiments/new/>`__
    264   (Follow the ‘help’ links to learn more)
    265 -  `Telemetry <https://wiki.mozilla.org/Telemetry>`__
    266 
    267 Train-Hop
    268 ~~~~~~~~~~~
    269 
    270 Extensions in browser/extensions/ can run inside of Firefox as a “built-in addon”.
    271 Unlike traditional WebExtensions, these add-ons ship with Firefox and run with the same privilege level as the rest of the browser code.
    272 
    273 When a built-in add-on is packaged up as an XPI and deployed to Beta or Release clients, it is referred to as a “train-hop”.
    274 A train-hop supplements the default Firefox train release model by allowing teams to ship code changes without requiring a dot release.
    275 
    276 By default, the code for built-in add-ons rides the standard Firefox release train.
    277 A train-hop only occurs when the extension is intentionally packaged and shipped off-train.
    278 
    279 The extensions that currently support train-hops are New Tab and Web Compatibility.
    280 
    281 Further Reading/Useful links:
    282 
    283 - `Web Compatibility Release Process <https://wiki.mozilla.org/Compatibility/System_Addon/Release_Process#Shipping_interventions_with_an_out-of-band_System_Addon_Update>`__
    284 - `Train-hopping for New Tab <https://firefox-source-docs.mozilla.org/browser/extensions/newtab/docs/v2-system-addon/train_hopping.html>`__
    285 
    286 Definitions
    287 -----------
    288 
    289 .. _approval flag:
    290 
    291 **Approval Flag** - A flag that represents a security approval or uplift
    292 request on a patch.
    293 
    294 .. _bugzilla:
    295 
    296 **Bugzilla** - Web-based general purpose bug tracking system and testing
    297 tool.
    298 
    299 .. _channel:
    300 
    301 **Channel** - Development channels producing concurrent releases of
    302 Firefox for Windows, Mac, Linux, and Android.
    303 
    304 .. _chemspill:
    305 
    306 **Chemspill** - Short for Chemical Spill. A chemspill is a rapid
    307 security-driven or critical stsbility dot release of our product.
    308 
    309 .. _channel meeting:
    310 
    311 **Channel Meeting** - A twice weekly time to check in on the status
    312 of the active releases with the release team.
    313 
    314 .. _dot release drivers:
    315 
    316 **Dot Release Drivers** - Issues/Fixes that are significant enough to
    317 warrant a minor dot release to the Firefox Release Channel. Usually to
    318 fix a stability (top-crash) or Security (Chemspill) issue.
    319 
    320 .. _early beta:
    321 
    322 **Early Beta** - Beta releases with the features gated by EARLY_BETA_OR_EARLIER
    323 enabled. The first 2 weeks of Beta releases during the cycle are early beta releases.
    324 
    325 .. _feature owner:
    326 
    327 **Feature Owner** - The person who is ultimately responsible for
    328 developing a high quality feature. This is typically an Engineering
    329 Manager or Product Manager.
    330 
    331 .. _github:
    332 
    333 **Github** - Web-based version control and collaboration platform for
    334 software developers
    335 
    336 .. _gtb:
    337 
    338 **GTB** - Acronym for Go to build.  Mostly used in the release schedule
    339 communication ("Go to build on March 18"), this means that we initiate the
    340 building of a specific release.
    341 
    342 .. _landing:
    343 
    344 **Landing** - A general term used for when code is merged into a
    345 particular source code repository
    346 
    347 .. _lando:
    348 
    349 **Lando** - Automated code lander for Mozilla. It is integrated with
    350 our `Phabricator instance <https://phabricator.services.mozilla.com>`__
    351 and can be used to land revisions to various repositories.
    352 
    353 .. _merge:
    354 
    355 **Merge** - General term used to describe the process of integrating and
    356 reconciling file changes within the mozilla repositories
    357 
    358 .. _nightly soft code freeze:
    359 
    360 **Nightly Soft Code Freeze** - Last week of the nightly cycle on firefox-main
    361 just before the merge to beta during which landing risky or experimental code
    362 in the repository is discouraged.
    363 
    364 .. _nimbus:
    365 
    366 **Nimbus** - Nimbus is a collection of servers, workflows, and
    367 Firefox components that enables Mozilla to remotely control Firefox
    368 clients in the wild based on precise criteria
    369 
    370 .. _nucleus:
    371 
    372 **Nucleus** - Name of the internal application used by release managers
    373 to prepare and publish release notes. The data in this application is
    374 fetched by mozilla.org.
    375 
    376 .. _orange_factor:
    377 
    378 **Orange** - Also called flaky or intermittent tests. Describes a state
    379 when a test or a testsuite can intermittently fail.
    380 
    381 .. _phabricator:
    382 
    383 **Phabricator** - Mozilla’s instance of the web-based software
    384 development collaboration tool suite. Read more about `Phabricator as a
    385 product <https://phacility.com/phabricator/>`__.
    386 
    387 .. _pi request:
    388 
    389 **PI Request** - Short for Product Integrity Request is a form
    390 submission request that’s used to engage the PI team for a variety of
    391 services. Most commonly used to request Feature QA it can also be used
    392 for Security, Fuzzing, Performance, and many other services.
    393 
    394 .. _preferences:
    395 
    396 **Preferences** - A preference is any value or defined behavior that can
    397 be set (e.g. enabled or disabled). Preference changes via user interface
    398 usually take effect immediately. The values are saved to the user’s
    399 Firefox profile on disk (in prefs.js).
    400 
    401 .. _rc:
    402 
    403 **Release Candidate** - Beta version with potential to be a final
    404 product, which is ready to release unless significant bugs emerge.
    405 
    406 .. _rc week:
    407 
    408 **RC Week** - The week prior to release go-live is known as RC week.
    409 During this week an RC is produced and tested.
    410 
    411 .. _release cycle:
    412 
    413 **Release Cycle** - The sum of stages of development and maturity for
    414 the Firefox Release Product.
    415 
    416 .. _reo:
    417 
    418 **Regression Engineering Owner** - A partner for release management
    419 assigned to each release. They both keep a mental state of how we are
    420 doing and ensure a decision is made about each regression reported in
    421 the release. AKA *REO*.
    422 
    423 .. _release engineering:
    424 
    425 **Release engineering** - Team primarily responsible for maintaining
    426 the build pipeline, the signature mechanisms, the update servers, etc. aka *releng*
    427 
    428 .. _release management:
    429 
    430 **Release Management** - Team primarily responsible for the process of
    431 managing, planning, scheduling and controlling a software build through
    432 different stages and environments. aka *relman*.
    433 
    434 .. _relnotes:
    435 
    436 **Relnotes** - Short for release notes. Firefox Nightly, Beta, and Release each ship
    437 with release notes.
    438 
    439 .. _Repository:
    440 
    441 **Repository** - a collection of stored data from existing databases
    442 merged into one so that it may be shared, analyzed or updated throughout
    443 an organization.
    444 
    445 .. _ride alongs:
    446 
    447 **Ride Alongs** - Bug fixes that are impacting release users but not
    448 considered severe enough to ship without an identified dot release
    449 driver.
    450 
    451 .. _rollout:
    452 
    453 **Rollout** - Shipping a release to a percentage of the release population.
    454 
    455 .. _status flags:
    456 
    457 **Status Flags** - A flag that represents the status of the bug with
    458 respect to a Firefox release.
    459 
    460 .. _string freeze:
    461 
    462 **String Freeze** - Period during which the introduction, modification, or
    463 deletion of strings exposed to the end-users is not allowed so as to allow our
    464 localizers to translate our product.
    465 
    466 .. _taskcluster:
    467 
    468 **taskcluster** - Our execution framework to build, run tests on multiple
    469 operating system, hardware and cloud providers.
    470 
    471 .. _telemetry:
    472 
    473 **Telemetry** - Firefox measures and collects non-personal information,
    474 such as performance, hardware, usage and customizations. This
    475 information is used by Mozilla to improve Firefox.
    476 
    477 .. _train model:
    478 
    479 **Train model** - a form of software release schedule in which a number
    480 of distinct series of versioned software releases are released as a
    481 number of different "trains" on a regular schedule.
    482 
    483 .. _tracking flags:
    484 
    485 **Tracking Flags** - A Bugzilla flag that shows whether a bug is being investigated
    486 for possible resolution in a Firefox release. Bugs marked tracking-Firefox XX are
    487 bugs that must be resolved one way or another before a particular release ship.
    488 
    489 .. _throttle unthrottle:
    490 
    491 **Throttle/Unthrottle a rollout** - Throttle is restricting a release rollout to 0%
    492 of the release population, users can still choose to update but are not updated
    493 automatically. Unthrottle is removing the release rollout restriction.
    494 
    495 .. _uplift:
    496 
    497 **Uplift** - the action of taking parts from a newer version of a
    498 software system (firefox-main or firefox-beta) and porting them to an
    499 older version of the same software (firefox-beta, firefox-release or ESR)