summaryrefslogtreecommitdiff
path: root/guide/preface.mdwn
blob: eb470deffcf6f2666f36572255b2f42f22cb4a0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
[[!meta title="The X New Developer’s Guide: Preface"]]
# Preface
*Bart Massey*

This is a guide intended to orient new developers in the
world of the X Window System.

That's asking a lot.

X is big and old. The distribution crossed a hundred
thousand lines of C code back when that meant something,
before there was an Internet to distribute it on: just reel
tapes and dialup modem lines. X version 11, the one that
matters, is celebrating its 25th birthday this year.

Big old systems are hard to understand. They grow and
evolve. The more used they are, the faster growth and
evolution happens. X is the third-most-used desktop
environment in the world---and has been for most of its
lifetime. There are millions of desktops running X right
now, and the system is still adapting and changing to meet
new needs of its users.

On the other hand, compared to similar large legacy software
systems, there are some things that make getting into X
easy. X is dominated by the C programming language. For all
its faults, this is barely a legacy language: there are
many, many more active C programmers today than when X
began. X was exceptionally well-designed, and has been
carefully redesigned and reimplemented in a modular and
professional fashion as it has grown. The famous split
between display and application that allows X to run over a
network turns out to have an even more important purpose: it
splits the X implementation into two parts connected by a
formally-defined and well-understood interface. Within both
the server and the client side, there is clear separation of
codebases and code responsibilities, and that modularity
actually seems to be increasing as the codebase grows.

There's a lot of documentation out there for X. Sadly, much
of it is old and stale, or was just not that well written in
the first place. The good news is that many of the people
who have worked on the design and implementation of X are
still around, and still active in X development. Even
better, they are a substantial fraction of the entire X
developer base.

Let me say that again. A very few very smart people, over a
25 year period, have built most of the key X infrastructure,
and these same people continue to build a lot of it today.

Keith Packard, "the Linus Torvalds of X" if there is such a
thing, once pointed out to me that there were, in its
heyday, many times more active developers of Fetchmail than
of X. In terms of amount of productive work per unit coder,
I would put X up against any project, open source or
proprietary, that I have ever come across. A few dozen
people still do most of the maintenance of the
multi-million-line "core X" codebase, many of them working
only in their spare time. (X toolkits and applications long
ago split off from the core, and formed their own extremely
large and vibrant communities. Core X just continued along,
mostly unaffected by this sea change.)

If you are thinking of doing X development, here is what you
should understand: this disproportion of core developers is
a tremendous opportunity for you. There is a huge amount of
interesting, exciting work to be done. Because you will be
working with well-understood technologies in a
well-constructed setting, the work tends to be as much
conceptual as it is labor-intensive: there are plenty of
places you can design interesting things and then build them
quickly. Because there is such a need for developers, and
because they are genuinely nice and brilliant people, the
founding architects of the systems that you will be working
with are excited to help you get started---often on a
one-on-one basis. Because the project is so widely deployed,
you will have direct, visible impact on a huge userbase all
over the world.

A lot of this is what open source in general promises its
developers. X, in my experience as a developer and in
watching other new X developers, delivers on these promises.

Sure, getting started as an X developer is a little
tricky. Hopefully this book can help; certainly the X
community can. Let me assure you of this, though: the
learning curve is easier than you think, and the payoffs are
greater. If you persist, you will befriend some great people
and build some things that you will be proud of for the rest
of your life.

So yeah, it's asking a lot. Try it anyway. Check out the
book. Ask questions. Build things.

Dive in and get started.

<address>
&mdash;Bart Massey,
Portland Oregon USA,
March 2012
</address>

<nav>
 <div style="border-top: 1px solid black; text-align: center;">
  <a href="../" rel="contents">The X New Developer’s Guide</a><br />
  <a href="../cover"  title="The X New Developer’s Guide: Cover" rel="prev">&lt;&lt; Cover</a>
  |
  <a href="../concepts"   title="The X New Developer’s Guide: X Window System Concepts" rel="next">X Window System Concepts &gt;&gt;</a>
 </div>
</nav>

[[!meta  link="../" rel="contents"]]
[[!meta  link="../cover" rel="prev"]]
[[!meta  link="../concepts" rel="next"]]