Release Process: Difference between revisions

From OLPC
Jump to navigation Jump to search
 
(124 intermediate revisions by 12 users not shown)
Line 1: Line 1:
{{Developers}}
= Release Process Overview =
{{Translations}}
This page describes OLPC's software release process.


== Goals ==
Special thanks to Michael Stone for creating most of the existing pages and spending time getting me up to speed on how its done now.
The goals of the release process process are to:


# Ensure high quality releases which meet the needs of users in a timely fashion.
Also to Charles Merriam for helping show how good it can get <br>
# Maximize the participation, productivity and enthusiasm of the open source community.
http://lists.laptop.org/pipermail/devel/2008-April/012318.html
# Create a predictable process which helps users and developers plan for the future.


== The output ==
This is a first draft. Please send comments, questions and suggestions to greg at laptop.org


The output of this process is a generic software image suitable for installation on OLPC's XO laptop platform. The image is generic in the sense that it includes a rounded selection of activities, applications, and languages.
[[User:Gregorio|Gregorio]] 08:46, 27 June 2008 (UTC) (UTC)


We do not expect established deployments to use this software image directly. Almost all deployments have needs or desires to customise the software image that they ship (e.g. with new languages, a different selection of activities, specific default settings, etc.). We expect that most established deployments will use the [[Build system]] to produce a variant of the release including their own customizations.
----


Nevertheless, the process of developing and stabilising the generic release is key, as it forms the base of all the deployment-customized software releases.
The goals of this process are to:


== The process ==
- Ensure high quality releases which meet the needs of users in a timely fashion. <br>
- Maximize the participation, productivity and enthusiasm of the open source community. <br>
- Create a predictable process which helps users and developers plan for the future. <br>


Each release is planned in advance, and this process results in a slightly different development/release methodology for each release. However, certain guidelines and well-established principles are stuck to:
== Time-based Releases ==


* The release planning documentation is made public from the start.
A Release consists of a set of builds, documentation, an approved [[Unscheduled_software_release_process|engineering change order]] (ECO), a completed [[USR_Checklist|checklist]] and support as defined below.
* Release development is divided into individual stages, separated by milestones (discussed below)
* Releases are coordinated according to a schedule of milestones, which is decided early on, and included in the release plan.
** This is important so that our customers know when to expect the final release, when they should get involved with development and testing, and to allow them to plan their upgrade/rollout.
** This is also a well-established practice in our neighbouring open source communities
* The release schedule is honored strictly. That is, the milestone dates are adhered to, even if some sacrifices (such as exclusion of planned features which didn't arrive in time) are made. Some flexibility can be allowed for, but these should be exceptional cases only.


The development process is divided into distinct stages, with milestones to mark the progression from each one to another. '''Each of the items below links to an extensive explanation (including technical and managerial procedures) of each stage''', be sure to read them all if you want to become involved in the release process.
For example, see [[OLPC_Update.1_Software_Release_Notes|8.1.0 Release Notes]], the most recent Release as of this writing
# [[Release Process/Planning]]
[[User:Gregorio|Gregorio]] 14:21, 27 June 2008 (UTC)
# [[Release Process/Development]]
# [[Release Process/Stabilization]]
# [[Release Process/Release]]


== Major and minor releases ==
'''Each release will have a page linked from the [[Releases|Releases page]]''' <br>


Major releases include large platform changes (such as updating to the latest versions of Fedora & Linux) and addition of new features.
Time-based means that we have a target release day well in advance. It also means that we have a plan to begin the final test on a specific day. It does not mean that the release is guaranteed to be complete on the target release day. Features and non-critical bug fixes will be deferred to make the release day. However, a minimum standard of quality as defined by the [[Unscheduled_software_release_process#Release_Team|Release Team]] must be met before the release is final. The release will be delayed until that minimum quality standard is met.


Minor releases (a.k.a. point releases) are limited to the fixing of bugs which are affecting deployments, and occasionally include translation and locale updates (requested by deployments).
The definition of a minimum quality standard must be worked out and refined over time in consultation with customers and developers. It should be a priority of development and test teams to define that in advance and codify it as effectively as possible.


: This was previously adhered to quite strictly, but the recent minor releases in the 10.1 series have seriously blurred the lines between major and minor releases. This degrade of practice started when OLPC's development resources were downsized, meaning that there were no resources in sight to allow for a future major release, resulting in the relaxing of criteria on what could go into the minor release. However, now that OLPC's software team has grown a bit again, it is my hope that this previous practice can be restored, so I've documented it that way. Time will tell... -[[User:DanielDrake|DanielDrake]] 17:22, 9 February 2011 (UTC)
The choice of time based releases is motivated by its success in a growing number of open source projects. For examples, see the [http://fedoraproject.org/wiki/Releases Fedora], [https://wiki.ubuntu.com/TimeBasedReleases Ubuntu] and [http://live.gnome.org/ReleasePlanning Gnome] projects.


=== Major Releases ===
== Features ==


New major releases will include a set of new features, pioneered and developed by OLPC staff and community members. A feature is defined as a significant change or enhancement to the current version of XO software that may or may not include new packages. Our feature process should be driven by the needs and feedback of our customers (deployments) and our users (young children).
A Major Release includes significant new functionality. There will be two Major releases a year.


Features are usually considered to meet one or more of the following objectives:
==== Duration of Support ====
# Highly user visible changes
Each Major Release will be supported for a period of 1 year from the time the [[USR_Checklist|Release Process Checklist]] is complete. The date in the "Release team final sign off" field defines the start of the 1 year support time frame.
# Improvements or changes that require non-trivial cross-package integration
# Noteworthy enough to call out in the release notes
# Exciting new capabilities we can trumpet.


Some examples might include:
:''Scott suggested that we could be well served by choosing which releases to support long-term only after having deployed them. That way, we will have much harder data with which to judge their quality. Is this approach feasible?'' --[[User:Mstone|Michael Stone]] 17:41, 28 June 2008 (UTC)
* New educational tools that will be used by children
* New features from upstream that we are making available on the XO for the first time
* Improvements to tools and infrastructure used by activity developers


OLPC plans which features to develop for each release according to its key principles and based on feedback from customers. During planning stages, a discussion will usually be started on the devel [[Mailing lists|mailing list]] in order to solicit input from the community, and to clearly communicate that the feature planning process is underway.
:''I don't think this is feasible as a customer needs to know way ahead of time whether a release is going to be supported. We need to be able to support major releases, or don't call it a major release. So I would prefer to say we are going to support the current and 1 previous major release, rather than say we are going to support a release for 1 year. That way if there is a good reason to delay a major release, or to go to a new process with many more major releases/year, then support is defined by the release (which we understand because we tested it) rather than by some arbitrary time period.''[[User:Kimquirk|Kimquirk]] 18:37, 29 June 2008 (UTC)


Features can also enter releases through upstream projects. For example, a new feature added to GNOME will automatically enter an OLPC release once a release is made including that specific GNOME version. Some of these features may have direct impact on OLPC and are good candidates to be discussed in the release notes.
:''An alternate suggestion: we might plan to alternate "big" and "little" major releases, with the first release of the year planned for aggressive new features, and the second for stability and upstream maintenance work. The "little" releases would be candidates for longer-term support, say 2 or 3 years. I don't know if I'd actually advocate this, since we are trying to integrate lots of pieces with their own feature "bigness" schedules, but I thought I'd mention the idea.'' --[[User:CScott|CScott]] 01:31, 29 June 2008 (UTC)


Features outside of OLPC's feature plan are also welcome to be contributed by interested individuals and deployments, providing that they meet the normal code acceptance criteria (open source, good code quality, good documentation, appointed maintainer, ...), and provided that they are accepted and included within the acceptable stages of the release schedule. In many cases, development of such features does not belong at the OLPC level, but rather in the upstream projects (for example, development of a new Sugar feature would fall entirely within the SugarLabs community, and would not need acceptance or review by OLPC).
==== Meaning of Support ====
Support means that a Minor Release with bug fixes will be built at OLPC's discretion based on discussion with customers and other stakeholders.
:''Support also means we will work with upstream to understand and resolve security issues, and we will track, recreate and understand critical customer issues, which usually drive the dates for minor releases. And, support means upgradability and backward compatibility. The matrix of test scenarios to ensure these two items is what limits how many release we can support at any given time. Each 'supported' release must be able to upgrade to the next one; and each 'supported' release must provide backward compatibility with any other 'supported' release. We have a lot to talk about here as this implies that every release has an upgrade feature and a backward compatibility feature that needs discussion, design, development, and lots of testing'' [[User:Kimquirk|Kimquirk]] 18:37, 29 June 2008 (UTC)


== Maintainability and sustainability ==
==== Example Major Release Names ====
Example names of Major Releases are 8.1.0, 8.2.0, 9.1.0, 9.2.0


OLPC has historically made quite a few changes to standard open source software technologies (Linux, Fedora, etc) and this hurts us in every release cycle. We are now a small team and every release cycle we spend a lot of time bringing forward the the collection of OLPC-local changes.
:''Is it worth dropping the .0 suffix for the first release? This seems to be the practice for Gnome (2.22), Ubuntu (8.04), and Fedora (Fedora 9).'' --[[User:CScott|CScott]] 01:31, 29 June 2008 (UTC)


In recent times, this "delta" from upstream software has been greatly reduced. We need to keep working in that direction, which means strict controls on any new non-upstream changes being added. The most effective way to approach this is to get your changes upstream first.
=== Minor Releases ===


== Version numbering ==
Minor releases will focus on bug fixes and will come out as often as negotiated by customers and OLPC. Minor releases may include new features if the release manager and primary customers agree they are well tested and documented. Minor releases must be fully backward compatible with the major release that they are based on. That is, activities and APIs must continue to work as before.


=== Release names ===
An example reason for generating a Minor release would be to add support for an additional languages.


The release names are of the form "Y.H.NN"
All the bug fixes and changes in a minor release will be tracked and recorded in a software ECO and included in the release notes. See the full minor release process definition at: http://wiki.laptop.org/go/Unscheduled_software_release_process
* Y = target calendar year
* H = major release number representing first release or second release of the calendar year
* NN represents the Minor Release, starting with .0 at the availability of the first Major Release and going up by 1 for each publicly available minor release after that.


Example names of Minor Releases names are 8.1.1, 8.1.2, 8.2.1, 8.2.2
A Major Release and all its derivative Minor Releases can be referred to with a variable (or wildcard) in the third digit (e.g. 8.2.x refers to 8.2.0, 8.2.1 and 8.2.3).


Examples:
:''I think we could benefit from trying to define the scope of minor releases more closely. If we release twice a year and support for a year, there will be a newer released major version for half the support window of the old release. How much time do we expect to spend backporting new features and refixing fixed bugs? For reference here is [http://www.us.debian.org/doc/developers-reference/ch-pkgs.en.html#s-upload-stable Debian's criteria for updates to stable]: basically only "critical" bugs, where critical is [http://www.debian.org/Bugs/Developer#severities defined as] "makes unrelated software on the system (or the whole system) break, or causes serious data loss, or introduces a security hole on systems where you install the package." Fedora uses a [http://fedoraproject.org/wiki/FedoraSummit/ReleaseProcess more liberal policy]: basically any proposed update which has not been voted down by testers after a week goes into a rolling "minor release". We should decide on an aim point between these extremes: are we "default yes" or "default no" on making minor releases? How many users must be affected before we'll consider one? My personal feeling is that minor releases suck away scarse release manager, QA, and engineering time, and thus should be avoided absent compelling reason, but I know that others feel we should make frequent minor releases with whatever is "easy" to backport, to help ensure that we make fixes and features available as quickly as possible to our users. --[[User:CScott|CScott]] 02:02, 29 June 2008 (UTC)
* 8.1.1: First Minor Release rebuild based on the first Major Release in 2008
* 8.2.0: Second Major Release in 2008


=== Build number ===
:''I agree with cscott. The better our definition that minor releases are for 'critical bug fixes' the more likely we will only have to do 1-3 minor releases, and generally only within the first 2-3 months of a major release. We should have some examples of what that means. The example above - support for new languages is a good example; and we can generally push a lot of the testing back to the country since that is in the deployment guide (they translate and test). An example related to a security issue should be evaluated for how likely it is; how many people it would affect; how much disruption the fix causes to the rest of the code base, etc.''[[User:Kimquirk|Kimquirk]] 18:44, 29 June 2008 (UTC)


Each release stream is composed of a series of builds: a number of development builds, followed by some release candidates, followed by a final build that consists of the official, final release. Each build has a unique number. As of 2012, the numbering scheme works as follows:
= Release and Build Naming Conventions =


Each Major Release resets build numbering to start at 1 for the first development build. Later builds will increment that number, starting with development builds. When stabilising, release candidates will continue the increment-by-one pattern until the final build is reached. For example, here is a hypothetical situation:
== Release Names ==


* 12.1.0 enters development. The first build is build 1. Builds 2,3,4,5,...34 are produced during the development phase.
Recall that Releases consist of a family of builds derived from a reference OS, along with "polish" like documentation, signatures, and installable images. It is assumed that end users including students will use a Release.
* 12.1.0 enters final stabilisation. Builds 35, 36, 37 are published as release candidates.
* The 12.1.0 release is finished. 12.1.0 build 37 is published as the official, final version.
* 12.2.0 enters development. Build numbering resets to build 1. Development builds 1,2,3,4,...,25 are produced
* 12.2.0 enters final stabilisation. Builds 26,27,28 are published as release candidates.
* The 12.2.0 release is finished. 12.2.0 build 28 is published as the official, final version.


=== Build filenames ===
The release names are of the form "Y.H.NN" <br>
* Y = target calendar year <br>
* H = major release number representing first release or second release of the calendar year <br>


As of 2012, the filenames of the release files produced by the [[build system]] are structured in the following manner:
Example Names <br>
* 8.1.1 First Minor Release rebuild based on the first Major Release in CY08 <br>
* 8.2.0 Second Major Release in CY08 <br>


# Fourth digit of the four-digit year corresponding to the Major Release (the "Y" component above), e.g. "2" in 2012, "3" in 2013
== Build Names ==
# The release number within the current year (first or second release, the "H" component from above). For 12.2.0, thats "2".
Recall that Releases consist of a family of builds derived from a reference OS, along with "polish" like documentation, signatures, and installable images. It is assumed that end users including students will use a Release.
# Three-digit zero-padded build number, e.g. 098
# An alphabetic 'deployment identifier', max 2 characters. OLPC will use "o", deployments may wish to use their two-letter country code.
# A numeric code identifying the target laptop model.
# A '.'
# The file extension


The laptop model codes are:
The build family consists of a reference OS named: <br>
* XO-1: 0
'''official-nnn''' <br>
* XO-1.5: 1
which lives on http://download.laptop.org/xo-1/os/official/. The word "official" means that it is a final Major or Minor Release build (link to doc, etc.). The "nnn" is an integer uniquely identifying the source code. An example is official-703.
* XO-1.75: 2
* XO-3: 3
* XO-4: 4


For example, 21099o1.img is 12.1.x build 99 for XO-1.5 published by OLPC. 22031ni2.img is 12.2.0 build 31 for XO-1.5, for the OLPC Nicaragua project.
Derivative builds may be created locally by anyone. However, cryptographic signatures are required to enable "cheap" mass installation of the derivatives. No signatures are required if you are willing to use OLPC-supported [[Customization_key|USB customization]] technology or if you request developer keys for all your machines.


If the deployment identifier code is limited to 2 characters, the resultant filename will adhere to the 8.3 limit (8 character filename, 3 character extension). This is the maximum filename length that can be read by the firmware when using VFAT-formatted USB media (this is common). This is why it is strongly recommended to limit the deployment identifier to two characters, although the build system does let you use more.
Derivative builds are named as follows: <br>
'''variant-nnn-n''' <br>
The "variant" field is typically a short string identifying a deployment or language group such as "peru" or "en". When the build name does not start with "official" it means that either:


== Supported locales/languages ==
* the reference operating system was customized to produce a derivative build, in which case the name will be as above, or
* a fork has taken place.


In the interest of keeping the image size down, OLPC only ships certain locales/translations in its released builds. New locales can be requested by writing to the devel [[mailing lists|mailing list]]. The criteria that must be met are:
For example,
* There is an active or soon-upcoming deployment (of any size) that is expected to use this language in the software release being targetted.
* The development cycle for the targetted software release is at an appropriate point (i.e. open-development, not frozen) to accept changes of this scope


On one hand, the selection of locales included in OLPC's official builds is somewhat irrelevant, because we expect all significant deployments to use the [[build system]] to produce a customized version of each official release that they ship; the supported locales can be modified at this time.
[http://download.laptop.org/xo-1/custom/peru/peru-703-6/ peru-703-6] is the customized build created for Peru based on the source code identified by [http://download.laptop.org/xo-1/os/official/703/ 703].


On the other hand, deployments should aim to become actively involved in the OLPC release process: updating, testing and refining their translations during the development stages of the release. This can't be done if OLPC's own releases don't include the locales/translations in question; asking deployments to regularly re-spin development builds is probably asking a bit much. So, deployments requesting inclusion of their specific locale makes a lot of sense, even if they will re-spin and customize the official release build when the time comes.
and


== How to contribute ==
[http://download.laptop.org/xo-1/custom/g1g1/en-708-1/ en-708-1] is the English language customization of release candidate build [http://download.laptop.org/xo-1/os/candidate/708/ 708]. This is not an official Release unless and until official-708 is released and it is documented on the release page.


=== Developing ===
:''I find this section confusing. The bits on an XO are a combination of a core OS plus an activity set. The peru-703-2 build was intended to denote that "core OS" 703 was combined with "version 2" of peru's activity set for that core. The "en-708-1" name seems to be too brief; it should be something like "g1g1-en-708-1" to more clearly indicate that it is the english language version of the "g1g1" activity set (that is, the activities provided to the original g1g1 participants). Presumably the "en" was intended to reflect that we might add different activities for future European g1g1 participants?
=== Testing ===
:''In any case, I believe this nomenclature was a mistake. We should not be exposing the raw build number of the core OS; we should be providing names like "peru-8.1-2" instead. This also reflects the fact that Peru's activity set is not likely to require change when 8.1.1 is released, since minor releases should maintain API compatibility.
:''Finally, the discussion in this section seems to anticipate the fact that some countries might fork the official OLPC core OS to varying degrees, and proposes a naming system for this which is confusingly similar to the names given to "official" core + activities set. If names for forks are required, I think we need to revisit this naming system altogether to avoid confusion. Perhaps '8.1+peru-2' is a better base name; a forked uruguay build based on 8.1 might be called 'uruguay-8.1+uruguay-3' or perhaps we should just encourage using an unrelated name like 'uruguay-1.0+uruguay-3' to avoid confusion with the "official" 8.1. --[[User:CScott|CScott]] 02:15, 29 June 2008 (UTC)


=== Translation ===
= Types of Builds =


Translation of the Sugar user interface (UI) is primarily handled via the Pootle instance hosted by Sugar Labs on behalf of the broader Sugar Labs / OLPC / eToys communities.
Each build consists of a core OS.


http://translate.sugarlabs.org/
One way of classifying a build is to identify its readiness to be a Release.


Documentation about the Translation Team and their processes can be found here:
There are four types of builds in that classification:


http://wiki.sugarlabs.org/go/Translation_Team
# Released images - (a.k.a. "stable") with release notes and ECO. This is a signed image which does not need a developer key to install on an XO. (e.g. official-703; the OS component of the 8.1.0 Release)
# Release candidates - (a.k.a. "testing") release candidates which are in change control and may become official releases if it passes the test cycle. (e.g. candidate-708; tentatively the OS component of the 8.1.1 Release )
# Development images - (a.k.a. "unstable") - the latest image with the latest code but it is also likely to contain significant bugs. (e.g. joyride-2072)
# Experimental images - images which are not expected to work and which are used for creating major new functionality; typically a part of "topic branches". (e.g. faster-2072)


The Translation Team coordinates it's efforts via the Localization (L10n) list hosted on OLPC's Mailman instance:
More details on available builds and how to get them are [[OS_images|here]].


http://lists.laptop.org/listinfo/localization
See also: [[Build_system|build system]], [http://www.us.debian.org/doc/developers-reference/ch-resources.en.html#s4.6.4 Debian descriptions of stable/testing/unstable/experimental].


Translation of the GNOME boot UI strings in OLPC Sugar / GNOME dual-boot images occurs in various upstream locations: the [http://l10n.gnome.org/releases/olpc/ GNOME L10n server], the Fedora Transifex server, and the Translation Project. Specific upstream packages used by OLPC are [http://translate.sugarlabs.org/projects/upstream_l10n/ tracked] on Pootle and several upstream packages are collaboratively localized and hosted on Pootle [http://translate.sugarlabs.org/projects/upstream_POT/ (e.g. AbiWord and Gnash)].
For a developer wanting to contribute new code we recommend the following steps:


== See also ==
# Decide whether you want to hack on activities, releases, bugs, or experimental features.
# Choose the corresponding build type: released images, candidates, development images, or your own topic branch.
# Send an e-mail to devel@lists.laptop.org and/or sugar@lists.laptop.org explaining your work and gathering feedback.
# Implement a basic first pass which compiles and shows the main idea. Post a link to its source to the same lists, preferably in a patch-like format.
# Revise as needed based on feedback.
# If possible, get the changes included in an upstream repository or, as appropriate, ask the list for details on how to package it locally for the XO.


* [[Release Process Home/Historical]] - historical plans for parts of the release process
Release candidates are the builds that may replace the current 'stable' designation. Release candidates are created during the execution of software engineering change orders. See details of ECO creation steps in the [[Unscheduled_software_release_process|Release Process page]] and [[OLPC_SW-ECO_5|An Example ECO for 8.1.1]]


[[Category:Releases]]
Note: each successful build generates products that can be installed on some system. For example, release builds contain disk images suitable for flashing to NAND, for consumption by OLPC update, for inspection on other systems, and for simulation in QEMU. Traditionally, important builds are announced on devel@lists.laptop.org.

= Release Schedules =

Getting a stable build out can be hard. A branch grows in stability over time and stability of the release and field testing the final release candidate takes time.

The steps to creating a release schedule are as follows.

== Steps ==

Step 1 - New Major Release is named. <br>

Step 2 - Release objectives and lead customer identified. Target features listed and target date down to the month is chosen. <br>
The module maintainer, with his peers and the community comes up with
a set of features for the release. Product Management participates in the discussion
and informs it based of customers feedback. Product Management and the
relevant module maintainers are responsible to build consensus. The
module maintainers are responsible to ensure that the code going in
git repositories is consistent with that consensus. <br>

Step 3 - Schedule is posted. <br>

"Change Control of X" means that you need to convince the maintainer of X to merge your change instead of pushing it yourself. What we call Change Control, many projects call "Feature Freeze".

== Milestones ==
0 Start Release Process '''Set Target Date''' Pick the date and name the release <br>
# 45 days before target date '''Change Control of Features'''. Release Candidate chosen. No new features added after this. <br>
# 30 days before target date '''Change Control of the Release'''. Only approved bugs allowed in after this <br>
# 15 days before target date '''Change Control of the Release Show Stoppers only'''. Only critical must have bugs allowed after this <br>
# <15 days before target date '''Final Test'''. Get consensus from test community, QA, and engineering then finish the [[USR_Checklist|Release Process Checklist]]. <br>
# Release day. '''Announcement Day'''. Once Release checklist is complete, Kim sends announcement e-mail approving release for production. <br>

'''Definitions <br>'''
* Change Control of Features
Prior to ''Change Control of Features'', there is great freedom to propose changes because resources have not been allocated toward integrating and testing the proposed changes. We allocate these resources with [[Scheduled software release process#Contracts|release contracts]]. After entering Change Control of Features, changes requiring reallocation of integration and test resources (i.e. requiring a new release contract) will require approval by module maintainers and Release Management before being accepted. Minor changes can still be added without approval for another 15 days. Changes requiring great coordination to deliver like string changes and UI changes will be deferred if possible.

* Change Control of the Release
All translation packages must be final by this time. <br>
On or before this date Module maintainers propose a set of bug fixes to get into the testing branch. They usually do so by releasing a new version of their module and informing the release team about the changes it contains and the steps necessary to test those. The release team will make sure that
the relevant QA is executed and either approve the changes or ask for fixes/improvements. As soon as the changes are approved they are added to the testing build. After this date no changes are allowed in to the code without the approval of the module maintainer and the [[Unscheduled_software_release_process#Triage_Team|Release Triage team]].

* Change Control of the Release Show Stoppers
As of this date every single change to the source code needs to be approved by the
[[Unscheduled_software_release_process#Release_Team|Release Team]] before it happens.

* Final Test
This is when the count down to release starts. The release is not final until the [[Unscheduled_software_release_process#Release_Team|Release Team]] signs off and the [[USR_Checklist|Release Process Checklist]] is complete.

* Announcement Day
This is the target release day but it is not the actual release day until the Final Test milestone is passed.

:''It is probably worth comparing this to the [http://fedoraproject.org/wiki/ReleaseEngineering/Overview Fedora release process], which offers much finer granularity for [http://fedoraproject.org/wiki/Releases/Schedule#Special_Terms types of "freeze"]. In particular, we need at least a string freeze step in our process. I respect Michael's dislike of the word "freeze", but I think we'd be better served by aggressively adopting Fedora's definitions here for consistency with our upstream. --[[User:CScott|CScott]] 02:30, 29 June 2008 (UTC)

:''unless and until our translations can be added on "ex post facto", any schedule has to include milestones for translations and different rules on what applies. For example, it is reasonably safe to strictly add a new translation up until nearly the end of the release process; modifying existing translations should have an earlier freeze date. But string freeze isn't a separate milestone in the above milestone schedule. Also note that we've already been burned by a translation not being ready when we need it, needing to make alternate translation plans; so we also need to check whether key translations are "ready" during the process. --[[User:Jg|Jg]]

= Release Steps =
Minor Releases follow the process outline here: <br>
http://wiki.laptop.org/go/Software_ECO_process

In particular a Release must complete the checklist: <br>
http://wiki.laptop.org/go/USR_Checklist

A Major Release follows the process documented here: <br>
http://wiki.laptop.org/go/Plan_of_Record-2008/Draft_3#RM:_Release_Mechanisms

= Release Goals and Request Prioritization =

TBD.

Existing thinking on the current plan is here <br>
http://wiki.laptop.org/go/Plan_of_Record-2008/Draft_3

= Open Items =

Open items needing definition and additional work
* Finalize Major Release process details and create page for it
* Update and post a new picture of the release process and release trains
* Create a schedule for 8.1.1 and 8.2.0
* List the software components, maintainers and modules in a release.
* Create an activities development process including a way to put them in releases.
* Make it easy to find the source for any component and build.
* Define feature and bug prioritization process
* Define release quality metrics and include test details and milestones
* Create governance and community best practices guidelines
* Gather community buy in and get consensus
* Finalize release and triage team members
* Review and finalize [http://wiki.laptop.org/go/Releases Status page]
* Put the process in to practice, revise and improve
* Include more details on translations in the process

[[User:CScott]]'s suggestions for further discussion:
* Is the "product" of our release a core OS, an OS plus "reference" activities, or are we ultimately responsible for producing final configurations for every deployment? Assuming that it's the second, what's the release process/schedule for those activities, and who decides (a) what activities are considered for inclusion, (b) what bugs will disqualify an activity for inclusion, and (c) what activities we will not "release" without? At what point(s) do we hand off release candidates for countries to validate against their activity set?
* [http://www.us.debian.org/doc/developers-reference/ch-resources.en.html#s-codenames Debian suggests using code names pre-release] so that end users aren't confused by the presence of unreleased builds on a stream with "8.2" in the name. In the past we had builds appearing on the "update.1" stream before we officially released "update.1"; we should consider altering that practice. [http://fedoraproject.org/wiki/ReleaseEngineering/Overview Fedora allows the community to vote on the codename for each release] which seems reasonable.
* Fedora is currently on a [http://fedoraproject.org/wiki/Releases/Schedule 6-month release schedule]. It has been suggested that we attempt to synchronize with them, and release roughly a month after Fedora does.
* We probably need to add process steps to handle [http://fedoraproject.org/wiki/ReleaseEngineering/Overview#Export_Approval export approval].
* Is six months too long between major releases for a stack in heavy active development? The longer the cycle, the more churn occurs and the harder it seems to be to stabilize. A four-month or even three-month release schedule could still sync up with Fedora, and might avoid the need to spend additional engineering effort on non-trivial minor releases. How will we know whether our release cycles are the right length? (Mozilla started with a 5 week milestone cycle, and [http://www.mozilla.org/roadmap/roadmap-05-Jun-2002.html#tree-management moved to quarterly milestones]; Fedora, Gnome, and Ubuntu are on 6-month cycles.)
* I believe it is worth adopting a [http://live.gnome.org/RoadMap community roadmap] like GNOME where, at the start of the release cycle, component owners can outline what they hope to land in the next major release.

Latest revision as of 04:32, 19 December 2013

  english | español HowTo [ID# 294137]  +/-  

This page describes OLPC's software release process.

Goals

The goals of the release process process are to:

  1. Ensure high quality releases which meet the needs of users in a timely fashion.
  2. Maximize the participation, productivity and enthusiasm of the open source community.
  3. Create a predictable process which helps users and developers plan for the future.

The output

The output of this process is a generic software image suitable for installation on OLPC's XO laptop platform. The image is generic in the sense that it includes a rounded selection of activities, applications, and languages.

We do not expect established deployments to use this software image directly. Almost all deployments have needs or desires to customise the software image that they ship (e.g. with new languages, a different selection of activities, specific default settings, etc.). We expect that most established deployments will use the Build system to produce a variant of the release including their own customizations.

Nevertheless, the process of developing and stabilising the generic release is key, as it forms the base of all the deployment-customized software releases.

The process

Each release is planned in advance, and this process results in a slightly different development/release methodology for each release. However, certain guidelines and well-established principles are stuck to:

  • The release planning documentation is made public from the start.
  • Release development is divided into individual stages, separated by milestones (discussed below)
  • Releases are coordinated according to a schedule of milestones, which is decided early on, and included in the release plan.
    • This is important so that our customers know when to expect the final release, when they should get involved with development and testing, and to allow them to plan their upgrade/rollout.
    • This is also a well-established practice in our neighbouring open source communities
  • The release schedule is honored strictly. That is, the milestone dates are adhered to, even if some sacrifices (such as exclusion of planned features which didn't arrive in time) are made. Some flexibility can be allowed for, but these should be exceptional cases only.

The development process is divided into distinct stages, with milestones to mark the progression from each one to another. Each of the items below links to an extensive explanation (including technical and managerial procedures) of each stage, be sure to read them all if you want to become involved in the release process.

  1. Release Process/Planning
  2. Release Process/Development
  3. Release Process/Stabilization
  4. Release Process/Release

Major and minor releases

Major releases include large platform changes (such as updating to the latest versions of Fedora & Linux) and addition of new features.

Minor releases (a.k.a. point releases) are limited to the fixing of bugs which are affecting deployments, and occasionally include translation and locale updates (requested by deployments).

This was previously adhered to quite strictly, but the recent minor releases in the 10.1 series have seriously blurred the lines between major and minor releases. This degrade of practice started when OLPC's development resources were downsized, meaning that there were no resources in sight to allow for a future major release, resulting in the relaxing of criteria on what could go into the minor release. However, now that OLPC's software team has grown a bit again, it is my hope that this previous practice can be restored, so I've documented it that way. Time will tell... -DanielDrake 17:22, 9 February 2011 (UTC)

Features

New major releases will include a set of new features, pioneered and developed by OLPC staff and community members. A feature is defined as a significant change or enhancement to the current version of XO software that may or may not include new packages. Our feature process should be driven by the needs and feedback of our customers (deployments) and our users (young children).

Features are usually considered to meet one or more of the following objectives:

  1. Highly user visible changes
  2. Improvements or changes that require non-trivial cross-package integration
  3. Noteworthy enough to call out in the release notes
  4. Exciting new capabilities we can trumpet.

Some examples might include:

  • New educational tools that will be used by children
  • New features from upstream that we are making available on the XO for the first time
  • Improvements to tools and infrastructure used by activity developers

OLPC plans which features to develop for each release according to its key principles and based on feedback from customers. During planning stages, a discussion will usually be started on the devel mailing list in order to solicit input from the community, and to clearly communicate that the feature planning process is underway.

Features can also enter releases through upstream projects. For example, a new feature added to GNOME will automatically enter an OLPC release once a release is made including that specific GNOME version. Some of these features may have direct impact on OLPC and are good candidates to be discussed in the release notes.

Features outside of OLPC's feature plan are also welcome to be contributed by interested individuals and deployments, providing that they meet the normal code acceptance criteria (open source, good code quality, good documentation, appointed maintainer, ...), and provided that they are accepted and included within the acceptable stages of the release schedule. In many cases, development of such features does not belong at the OLPC level, but rather in the upstream projects (for example, development of a new Sugar feature would fall entirely within the SugarLabs community, and would not need acceptance or review by OLPC).

Maintainability and sustainability

OLPC has historically made quite a few changes to standard open source software technologies (Linux, Fedora, etc) and this hurts us in every release cycle. We are now a small team and every release cycle we spend a lot of time bringing forward the the collection of OLPC-local changes.

In recent times, this "delta" from upstream software has been greatly reduced. We need to keep working in that direction, which means strict controls on any new non-upstream changes being added. The most effective way to approach this is to get your changes upstream first.

Version numbering

Release names

The release names are of the form "Y.H.NN"

  • Y = target calendar year
  • H = major release number representing first release or second release of the calendar year
  • NN represents the Minor Release, starting with .0 at the availability of the first Major Release and going up by 1 for each publicly available minor release after that.

A Major Release and all its derivative Minor Releases can be referred to with a variable (or wildcard) in the third digit (e.g. 8.2.x refers to 8.2.0, 8.2.1 and 8.2.3).

Examples:

  • 8.1.1: First Minor Release rebuild based on the first Major Release in 2008
  • 8.2.0: Second Major Release in 2008

Build number

Each release stream is composed of a series of builds: a number of development builds, followed by some release candidates, followed by a final build that consists of the official, final release. Each build has a unique number. As of 2012, the numbering scheme works as follows:

Each Major Release resets build numbering to start at 1 for the first development build. Later builds will increment that number, starting with development builds. When stabilising, release candidates will continue the increment-by-one pattern until the final build is reached. For example, here is a hypothetical situation:

  • 12.1.0 enters development. The first build is build 1. Builds 2,3,4,5,...34 are produced during the development phase.
  • 12.1.0 enters final stabilisation. Builds 35, 36, 37 are published as release candidates.
  • The 12.1.0 release is finished. 12.1.0 build 37 is published as the official, final version.
  • 12.2.0 enters development. Build numbering resets to build 1. Development builds 1,2,3,4,...,25 are produced
  • 12.2.0 enters final stabilisation. Builds 26,27,28 are published as release candidates.
  • The 12.2.0 release is finished. 12.2.0 build 28 is published as the official, final version.

Build filenames

As of 2012, the filenames of the release files produced by the build system are structured in the following manner:

  1. Fourth digit of the four-digit year corresponding to the Major Release (the "Y" component above), e.g. "2" in 2012, "3" in 2013
  2. The release number within the current year (first or second release, the "H" component from above). For 12.2.0, thats "2".
  3. Three-digit zero-padded build number, e.g. 098
  4. An alphabetic 'deployment identifier', max 2 characters. OLPC will use "o", deployments may wish to use their two-letter country code.
  5. A numeric code identifying the target laptop model.
  6. A '.'
  7. The file extension

The laptop model codes are:

  • XO-1: 0
  • XO-1.5: 1
  • XO-1.75: 2
  • XO-3: 3
  • XO-4: 4

For example, 21099o1.img is 12.1.x build 99 for XO-1.5 published by OLPC. 22031ni2.img is 12.2.0 build 31 for XO-1.5, for the OLPC Nicaragua project.

If the deployment identifier code is limited to 2 characters, the resultant filename will adhere to the 8.3 limit (8 character filename, 3 character extension). This is the maximum filename length that can be read by the firmware when using VFAT-formatted USB media (this is common). This is why it is strongly recommended to limit the deployment identifier to two characters, although the build system does let you use more.

Supported locales/languages

In the interest of keeping the image size down, OLPC only ships certain locales/translations in its released builds. New locales can be requested by writing to the devel mailing list. The criteria that must be met are:

  • There is an active or soon-upcoming deployment (of any size) that is expected to use this language in the software release being targetted.
  • The development cycle for the targetted software release is at an appropriate point (i.e. open-development, not frozen) to accept changes of this scope

On one hand, the selection of locales included in OLPC's official builds is somewhat irrelevant, because we expect all significant deployments to use the build system to produce a customized version of each official release that they ship; the supported locales can be modified at this time.

On the other hand, deployments should aim to become actively involved in the OLPC release process: updating, testing and refining their translations during the development stages of the release. This can't be done if OLPC's own releases don't include the locales/translations in question; asking deployments to regularly re-spin development builds is probably asking a bit much. So, deployments requesting inclusion of their specific locale makes a lot of sense, even if they will re-spin and customize the official release build when the time comes.

How to contribute

Developing

Testing

Translation

Translation of the Sugar user interface (UI) is primarily handled via the Pootle instance hosted by Sugar Labs on behalf of the broader Sugar Labs / OLPC / eToys communities.

http://translate.sugarlabs.org/

Documentation about the Translation Team and their processes can be found here:

http://wiki.sugarlabs.org/go/Translation_Team

The Translation Team coordinates it's efforts via the Localization (L10n) list hosted on OLPC's Mailman instance:

http://lists.laptop.org/listinfo/localization

Translation of the GNOME boot UI strings in OLPC Sugar / GNOME dual-boot images occurs in various upstream locations: the GNOME L10n server, the Fedora Transifex server, and the Translation Project. Specific upstream packages used by OLPC are tracked on Pootle and several upstream packages are collaboratively localized and hosted on Pootle (e.g. AbiWord and Gnash).

See also