Versions.xml revision 972599cf
1<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
2	  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
3]>
4
5<article id='Versions'>
6
7<articleinfo>
8
9<title>X.Org Version Numbering Schemes</title>
10<corpauthor>
11The XFree86 Project, Inc
12</corpauthor>
13<corpauthor>
14Updated for X.Org by Keith Packard, Kevin E. Martin, and Alan Coopersmith
15</corpauthor>
16<pubdate>November 2010</pubdate>
17
18<abstract>
19
20<para>
21X.Org has adopted the same basic numbering scheme used by the XFree86
22Project, Inc. for their releases.  The actual numbers are different, but the
23basic scheme is the same.  This document reflects the policy that X.Org uses.
24</para>
25
26</abstract>
27
28</articleinfo>
29
30<sect1 id='Module_Versions'>
31<title>Module Versions</title>
32
33<para>
34Starting with the X11R7.0 release, each module has its own version number.
35For those without a natural starting point, the version numbers started at
361.0.   For instance, the X11R7.0 release included the xorg-server 1.0
37module.   As modules are released independently from the rest of the
38window system, the module version is the most accurate source of version
39information.   For instance, there are many X server releases in a year,
40but generally only one window system release, so an X server version number
41such as 1.7.7 is more informative than the X11R7.5 version for the window
42system <quote>katamari</quote> release.
43</para>
44
45<para>
46Unfortunately, up through the X server 1.3 release, the X server
47used the Window System version when reporting its version number
48in log files, the -version option, and the connection setup string
49(displayed by xdpyinfo).   This was corrected with X server 1.3, which
50caused the visible version number string to appear to jump backwards
51from 7.2 to 1.3.
52</para>
53</sect1>
54
55<sect1 id='Releases_Development_Streams_and_Branches'>
56<title>Releases, Development Streams, and Branches</title>
57
58<para>
59X.Org has two release branches for the X server software, and several
60other modules with active ongoing development.
61First is the trunk of the git repository.  This is
62the main development stream, where all new work and work for future
63releases is done.
64</para>
65
66<para>
67Second is the stable bugfix branch for the latest full release.  It is
68created around the time of the release.  The branch will be named for the
69release version, such as <quote><literal>server-1.9-branch</literal></quote>
70for the X server 1.9.x series of releases.
71Fixes for bugs found in the release will be added to this branch (as
72well as the trunk), and updates to this release (if any) will be cut
73from this branch.  Similar stable branches are present for previous full
74releases.
75</para>
76
77<para>
78The X.Org Foundation is planning to make full releases from the main
79development stream at regular intervals in the 6-12 month range.  The
80feature freezes for these releases will usually be 2-3 months before the
81release dates.  This general plan is a goal, not a binding commitment.
82The actual release intervals and dates will depend to a large degree on
83the resource available to X.Org.
84Update/bugfix releases will be made on an as-required basis,
85depending also on the availability of resources, and will generally be
86limited to serious bug and security fixes.  New features will not
87usually be added in update releases.
88</para>
89
90<para>
91Aside from actual releases, snapshots of the active release branches
92are tagged in the git repository from time to time.  Each such snapshot
93has an identifiable version number.
94</para>
95
96</sect1>
97
98<sect1 id='Current_Version_Numbering_Scheme'>
99<title>Current Version Numbering Scheme</title>
100
101<para>
102Starting with the main development branch after X11R6.7, the X.Org
103versions are numbered according to the scheme outlined here.
104</para>
105
106<para>
107The version numbering format is <literal remap="tt">M.m.P.s</literal>,
108where <replaceable>M</replaceable> is the major version number,
109<replaceable>m</replaceable> is the minor version number,
110<replaceable>P</replaceable> is the patch level, and
111<replaceable>s</replaceable> is the snapshot number.
112Full releases have <replaceable>P</replaceable> set to zero, and it is
113incremented for each subsequent bug fix release on the post-release
114stable branch.  The snapshot number <replaceable>s</replaceable> is
115present only for between-release snapshots of the development and
116stable branches.
117</para>
118
119<sect2 id='Development_Branch'>
120<title>Development Branch</title>
121
122<para>
123Immediately after forming a release stable branch, the patch level
124number for the main development branch is bumped to 99, and the snapshot
125number is reset.  The snapshot number is incremented for each tagged
126development snapshot.  The git tag for snapshots is
127<quote><literal remap="tt">xorg-server-M.m.P.s</literal></quote>.
128When the development branch enters feature
129freeze, the snapshot number is bumped to 900.  A stable branch may be
130created for the next full release at any time after the feature freeze.
131When it is, the branch is called
132<quote><literal remap="tt">server-M.m-branch</literal></quote>.  The
133snapshot number is incremented from there until the release is
134finalised.  Each of these snapshots is a <quote>release candidate</quote>.  When the
135release is finalised, the minor version is incremented, the patch level
136is set to zero, and the snapshot number removed.
137</para>
138
139<para>
140Here's an example which shows the version number sequence for the
141development leading up to version 1.8:
142</para>
143
144<para>
145<variablelist>
146
147<varlistentry>
148<term><literal remap="tt">1.7.99.1</literal></term>
149<listitem>
150<para>
151The first snapshot of the pre-1.8 development branch.
152</para>
153</listitem>
154</varlistentry>
155<varlistentry>
156<term><literal remap="tt">1.7.99.23</literal></term>
157<listitem>
158<para>
159The twenty-third snapshot of the pre-1.8 development branch.
160</para>
161</listitem>
162</varlistentry>
163<varlistentry>
164<term><literal remap="tt">1.7.99.900</literal></term>
165<listitem>
166<para>
167The start of the 1.8 feature freeze.
168</para>
169</listitem>
170</varlistentry>
171<varlistentry>
172<term><literal remap="tt">1.7.99.903</literal></term>
173<listitem>
174<para>
175The third 1.8 release candidate.
176</para>
177</listitem>
178</varlistentry>
179<varlistentry>
180<term><literal remap="tt">1.8.0</literal></term>
181<listitem>
182<para>
183The 1.8 release.
184</para>
185</listitem>
186</varlistentry>
187<varlistentry>
188<term><literal remap="tt">1.8.99.1</literal></term>
189<listitem>
190<para>
191The first pre-1.9 development snapshot, which  is the first main
192branch snapshot after creating the 1.8 stable branch.
193</para>
194</listitem>
195</varlistentry>
196</variablelist>
197</para>
198
199</sect2>
200
201<sect2 id='Stable_Branch'>
202<title>Stable Branch</title>
203
204<para>
205After a full release, the stable branch for the release will be
206maintained with bug fixes and important updates until the next full
207release.  Any snapshots on this branch are considered <quote>release
208candidates,</quote> which is indicated by setting <replaceable>s</replaceable>
209to a number above
210900.  The snapshot number is incremented for each release candidate
211until the update release is finalised.  The patch level value
212(<replaceable>P</replaceable>) is incremented for each update release.
213</para>
214
215<para>
216Here's an example which shows a version number sequence for a 1.8.x
217stable branch:
218</para>
219
220<para>
221<variablelist>
222
223<varlistentry>
224<term><literal remap="tt">1.8.0</literal></term>
225<listitem>
226<para>
227The 1.8 release.
228</para>
229</listitem>
230</varlistentry>
231<varlistentry>
232<term><literal remap="tt">1.8.0.901</literal></term>
233<listitem>
234<para>
235The first pre 1.8.1 snapshot.
236</para>
237</listitem>
238</varlistentry>
239<varlistentry>
240<term><literal remap="tt">1.8.0.903</literal></term>
241<listitem>
242<para>
243The third pre 1.8.1 snapshot, also known as the third 1.8.1 release
244candidate.
245</para>
246</listitem>
247</varlistentry>
248<varlistentry>
249<term><literal remap="tt">1.8.1</literal></term>
250<listitem>
251<para>
252The 1.8.1 release.
253</para>
254</listitem>
255</varlistentry>
256<varlistentry>
257<term><literal remap="tt">1.8.1.901</literal></term>
258<listitem>
259<para>
260The first pre 1.8.2 snapshot.
261</para>
262</listitem>
263</varlistentry>
264<varlistentry>
265<term><literal remap="tt">1.8.2</literal></term>
266<listitem>
267<para>
268The 1.8.2 release.
269</para>
270</listitem>
271</varlistentry>
272</variablelist>
273</para>
274
275</sect2>
276
277</sect1>
278
279<sect1 id='Finding_the_X.Org_X_Server_Version_From_a_Client'>
280<title>Finding the X.Org X Server Version From a Client</title>
281
282<para>
283The X.Org X servers report a <function>VendorRelease</function> value that
284matches the X.Org version number.  There have been some cases of releases where
285this value wasn't set correctly.  The rules for interpreting this value
286as well as the known exceptions are outlined here.
287</para>
288
289<para>
290As noted above, the version reported by <function>VendorRelease</function>
291changed from the window system version to the X server version starting in
292the xorg-server 1.3 release.
293</para>
294
295<para>
296For all X.Org development and release versions using this numbering
297scheme, the <function>VendorRelease</function> value is
298<replaceable>MMmmPPsss</replaceable>.  That is, version
299<replaceable>M.m.P.s</replaceable> has <function>VendorRelease</function> set to
300<code>M&nbsp;*&nbsp;10000000&nbsp;+&nbsp;m&nbsp;*&nbsp;100000&nbsp;+&nbsp;P&nbsp;*&nbsp;1000&nbsp;+&nbsp;s</code>.
301</para>
302
303<para>
304The following is a code fragment taken from <filename>xdpyinfo.c</filename>
305that shows how the <function>VendorRelease</function> information can be
306interpreted.
307</para>
308
309<para>
310
311<programlisting>
312    if (strstr(ServerVendor(dpy), "X.Org")) {
313        int vendrel = VendorRelease(dpy);
314
315        printf("X.Org version: ");
316	printf("%d.%d.%d", vendrel / 10000000,
317	       (vendrel /   100000) % 100,
318	       (vendrel /     1000) % 100);
319	if (vendrel % 1000) {
320	    printf(".%d", vendrel % 1000);
321	}
322    }
323</programlisting>
324
325</para>
326
327</sect1>
328
329</article>
330