187 lines
7.2 KiB
HTML
187 lines
7.2 KiB
HTML
<html devsite>
|
|
<head>
|
|
<title>Codelines, Branches, and Releases</title>
|
|
<meta name="project_path" value="/_project.yaml" />
|
|
<meta name="book_path" value="/_book.yaml" />
|
|
</head>
|
|
<body>
|
|
<!--
|
|
Copyright 2017 The Android Open Source Project
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
|
|
|
|
<p>
|
|
The Android Open Source Project (AOSP) maintains a complete software stack to be ported by
|
|
OEMs and other device implementors and run on their own hardware. To maintain the quality of
|
|
Android, Google has contributed full-time engineers, product managers, user interface designers,
|
|
quality assurance testers, and all the other roles required to bring modern devices to market.
|
|
</p>
|
|
|
|
<p>
|
|
Accordingly, we maintain a number of "code lines" to clearly separate the current stable
|
|
version of Android from unstable experimental work. We roll the open source administration
|
|
and maintenance of the Android code lines into the larger product development cycle.
|
|
</p>
|
|
|
|
<p>
|
|
The chart below depicts at a conceptual level how AOSP manages code and releases. We're
|
|
referring to these as "code lines" instead of "branches" simply because at any given moment
|
|
there may be more than one branch for a given "code line". For instance, when a
|
|
release is cut, it may or may not become a new branch based on the needs of the moment.
|
|
</p>
|
|
<ol>
|
|
<li>
|
|
<p>
|
|
At any given moment, there is a current latest release of the Android platform. This
|
|
typically takes the form of a branch in the tree.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Device builders and contributors work with the current latest release, fixing bugs,
|
|
launching new devices, experimenting with new features, and so on.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
In parallel, Google works internally on the next version of the Android platform and
|
|
framework according to the product's needs and goals. We develop the next
|
|
version of Android by working with a device partner on a flagship device whose
|
|
specifications are chosen to push Android in the direction we believe it should go.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
When the "n+1"th version is ready, it will be published to the public source tree and
|
|
become the new latest release.
|
|
</p>
|
|
</li>
|
|
</ol>
|
|
<img src="/images/code-lines.png" alt="code-line diagram" id="figure1" >
|
|
<p class="img-caption">
|
|
<strong>Figure 1.</strong> AOSP code and releases
|
|
</p>
|
|
<h2 id="terms-and-caveats">
|
|
Terms and Caveats
|
|
</h2>
|
|
<ul>
|
|
<li>
|
|
<p>
|
|
A <em>release</em> corresponds to a formal version of the Android platform, such as 1.5,
|
|
2.1, and so on. Generally speaking, a release of the platform corresponds to the version in
|
|
the <code>SdkVersion</code> field of AndroidManifest.xml files and defined within
|
|
<code>frameworks/base/api</code> in the source tree.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
An <em>upstream</em> project is an open source project from which the Android stack is
|
|
pulling code. These include obvious projects such as the Linux kernel and WebKit.
|
|
Over time we are migrating some of the semi-autonomous Android projects (such as ART,
|
|
the Android SDK tools, Bionic, and so on) to work as "upstream" projects. Generally,
|
|
these projects are developed entirely in the public tree. For some upstream projects,
|
|
development is done by contributing directly to the upstream project itself. See <a href=
|
|
"submit-patches.html#upstream-projects">Upstream Projects</a> for details. In both cases,
|
|
snapshots will be periodically pulled into releases.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
At all times, a release code-line (which may actually consist of more than one actual
|
|
branch in git) is considered the sole canonical source code for a given Android platform
|
|
version. OEMs and other groups building devices should pull only from a release branch.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
"Experimental" code-lines are established to capture changes from the community so they can
|
|
be iterated on with an eye toward stability.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Changes that prove stable will eventually be pulled into a release branch. Note this
|
|
applies only to bug fixes, application improvements, and other changes that do not affect the
|
|
APIs of the platform.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Changes will be pulled into release branches from upstream projects (including the
|
|
Android "upstream" projects) as necessary.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
The "n+1"th version (that is, next major version of the framework and platform APIs) will
|
|
be developed by Google internally. See <a href=
|
|
"#about-private-code-lines">About Private Codelines</a> for details.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Changes will be pulled from upstream, release, and experimental branches into Google's
|
|
private branch as necessary.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
When the platform APIs for the next version have stabilized and been fully tested, Google
|
|
will cut a release of the next platform version. (This specifically refers to a new
|
|
<code>SdkVersion</code>.) This will also correspond to the internal code-line being made
|
|
a public release branch, and the new current platform code-line.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
When a new platform version is cut, a corresponding experimental code-line will be
|
|
created at the same time.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h2 id="about-private-code-lines">
|
|
About Private Codelines
|
|
</h2>
|
|
<p>
|
|
The source management strategy above includes a code-line that Google will keep private. The
|
|
reason for this is to focus attention on the current public version of Android.
|
|
</p>
|
|
<p>
|
|
OEMs and other device builders naturally want to ship devices with the latest version of
|
|
Android. Similarly, application developers don't want to deal with more platform
|
|
versions than strictly necessary. Meanwhile, Google retains responsibility for the strategic
|
|
direction of Android as a platform and a product. Our approach focuses on a small number of
|
|
flagship devices to drive features while securing protections of Android-related intellectual
|
|
property.
|
|
</p>
|
|
<p>
|
|
As a result, Google frequently has possession of confidential information from third parties.
|
|
And we must refrain from revealing sensitive features until we've secured the appropriate
|
|
protections. In addition, there are real risks to the platform arising from having too many
|
|
platform versions extant at once. For these reasons, we have structured the open source
|
|
project -- including third-party contributions -- to focus on the currently-public stable
|
|
version of Android. "Deep development" on the next version of the platform will happen in
|
|
private until it's ready to become an official release.
|
|
</p>
|
|
<p>
|
|
We recognize many contributors will disagree with this approach. We respect others
|
|
may have a different point of view; however, this is the approach we feel is best, and
|
|
the one we've chosen to implement.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|