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)