Dan Morrill | a9788cd | 2009-11-15 11:49:30 -0800 | [diff] [blame] | 1 | page.title=Android Code-Lines |
| 2 | doc.type=source |
| 3 | @jd:body |
| 4 | <p>The Android Open Source Project maintains a complete software stack intended |
| 5 | to be ported by OEMs and other device implementors to run on actual hardware. |
| 6 | Accordingly, we maintain a number of "code lines" to clearly separate the |
| 7 | current stable version of Android from unstable experimental work.</p> |
| 8 | <p>The chart below depicts at a conceptual level how AOSP manages code and |
| 9 | releases. We're referring to these as "code lines" instead of "branches" |
| 10 | simply because at any given moment there may be more than one branch extant |
| 11 | for a given "code line". For instance, when a release is cut, sometimes that |
| 12 | will become a new branch in git, and sometimes not, based on the needs of the |
| 13 | moment.</p> |
| 14 | <img src="{@docRoot}images/code-lines.png"/> |
| 15 | <h3>Notes and Explanations</h3> |
| 16 | <ul> |
| 17 | <li>A <i>release</i> corresponds to a formal version of the Android platform, such |
| 18 | as 1.5, 2.0, and so on. Generally speaking, a release of the platform |
| 19 | corresponds to a version of the <code>SdkVersion</code> field used in |
| 20 | AndroidManifest.xml files, and defined in <code>frameworks/base/api</code> in |
| 21 | the source tree.</li> |
| 22 | <li>An <i>upstream</i> project is an open-source project from which the Android |
| 23 | stack is pulling code. These include obvious projects such as the Linux kernel |
| 24 | and WebKit, but over time we are migrating some of the semi-autonomous |
| 25 | Android projects (such as Dalvik, the Android SDK tools, Bionic, and so on) to |
| 26 | work as "upstream" projects. These will be developed entirely in the public |
| 27 | tree, and snapshots will be periodically pulled into releases.</li> |
| 28 | <li>The diagram refers to "Eclair" and "Flan"; however, they are simply |
| 29 | placeholders, and the diagram actually reflects the overall release and |
| 30 | branching strategy.</li> |
| 31 | <li>At all times, the Release code-line (which may actually consist of |
| 32 | more than one actual branch in git) is considered the sole canonical source |
| 33 | code for a given Android platform. OEMs and other groups building devices |
| 34 | should pull only from a Release branch.</li> |
| 35 | <li>We will be setting up an "Experimental" code-line to capture changes from |
| 36 | the community, so that they can be iterated on, with an eye toward stability.</li> |
| 37 | <li>Changes that prove stable will eventually be pulled into a Release |
| 38 | branch. Note that this will only apply to bug fixes, app improvements, and |
| 39 | other things that do not affect the APIs of the platform.</li> |
| 40 | <li>Changes will be pulled into Release branches from upstream projects |
| 41 | (include the Android "upstream" projects) as necessary.</li> |
| 42 | <li>The "n+1"th version (that is, next major version of the framework and |
| 43 | platform APIs) will be developed by Google internally. (See below for |
| 44 | details.)</li> |
| 45 | <li>Changes will be pulled from upstream, Release, and Experimental branches |
| 46 | into Google's private branch as necessary.</li> |
| 47 | <li>When the platform APIs for the next version have stabilized and been fully |
| 48 | tested, Google will cut a release of the next platform version. (This |
| 49 | specifically refers to a new <code>SdkVersion</code>.) This will also |
| 50 | correspond to the internal code-line being made a public Release branch, and the |
| 51 | new current platform code-line.</li> |
| 52 | <li>When a new platform version is cut, a corresponding Experimental |
| 53 | code-line.</li> |
| 54 | </ul> |
| 55 | <h3>About Private Code-Lines</h3> |
| 56 | <p>The source management strategy above includes a code-line that Google will |
| 57 | keep private. The reason for this is to focus attention on the current public |
| 58 | version of Android.</p> |
| 59 | <p>OEMs and other device builders naturally want to ship devices with the |
| 60 | latest version of Android. Similarly, application developers don't want to |
| 61 | deal with more extant platform versions than strictly necessary. Meanwhile, |
| 62 | Google retains responsibility for the strategic direction of Android as a |
| 63 | platform and a product. Our approach is based on focusing on a small number of |
| 64 | flagship devices to drive features, and secure protections of Android-related |
| 65 | intellectual property through patents and the like.</p> |
| 66 | <p>As a result, Google frequently has possession of confidential |
| 67 | information of third parties, and we must refrain from revealing patentable |
| 68 | features until we've secured the appropriate protections. Meanwhile, there are |
| 69 | real risks to the platform arising from having too many platform versions |
| 70 | extant at once. For these reasons, we have structured the open-source project |
| 71 | -- including third-party contributions -- to focus on the currently-public |
| 72 | stable version of Android. "Deep development" on the next version of the |
| 73 | platform will happen in private, until it's ready to become an official |
| 74 | release.</p> |
| 75 | <p>We recognize that many contributors will disagree with this approach. We |
| 76 | respect that others may have a different point of view; however, this is the |
| 77 | approach that we feel is best, and the one we've chosen to implement.</p> |