1 @c -*- coding: utf-8; mode: texinfo; -*-
3 @include included/helpus.itexi
5 @node Introduction to contributing
6 @chapter Introduction to contributing
8 This chapter presents a quick overview of ways that people can
13 * Overview of work flow::
29 @node Overview of work flow
30 @section Overview of work flow
33 @strong{Ultra-short summary for Unix developers}: source code is at
34 @code{git://git.sv.gnu.org/lilypond.git}. Documentation is built
35 with Texinfo, after pre-processing with @code{lilypond-book}.
36 Send well-formed patches to @email{lilypond-devel@@gnu.org}.
39 Git is a @emph{version control system} that tracks the history of
40 a program's source code. The LilyPond source code is maintained
41 as a Git repository, which contains:
45 all of the source files needed to build LilyPond, and
48 a record of the entire history of every change made to every file
49 since the program was born.
52 The @q{official} LilyPond Git repository is hosted by the GNU
53 Savannah software forge at @uref{http://git.sv.gnu.org}.
54 Although, since Git uses a @emph{distributed} model, technically
55 there is no central repository. Instead, each contributor keeps a
56 complete copy of the entire repository (about 116M).
58 Changes made within one contributor's copy of the repository can
59 be shared with other contributors using @emph{patches}. A patch
60 is a simple text file generated by the @command{git} program that
61 indicates what changes have been made (using a special format).
62 If a contributor's patch is approved for inclusion (usually
63 through the mailing list), someone on the current development team
64 will @emph{push} the patch to the official repository.
66 The Savannah software forge provides two separate interfaces for
67 viewing the LilyPond Git repository online: @emph{cgit} and
68 @emph{gitweb}. The cgit interface should work faster than gitweb
69 in most situations, but only gitweb allows you to search through
70 the source code using @command{grep}, which you may find useful.
71 The cgit interface is at
72 @uref{http://git.sv.gnu.org/cgit/lilypond.git/} and the gitweb
74 @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git}.
76 Git is a complex and powerful tool, but tends to be confusing at
77 first, particularly for users not familiar with the command line
78 and/or version control systems. Contributors who don't want to
79 deal with Git directly are encouraged to use the
80 @command{lily-git} graphical user interface instead.
82 @emph{Compiling} (@q{building}) LilyPond allows developers to see
83 how changes to the source code affect the program itself.
84 Compiling is also needed to package the program for specific
85 operating systems or distributions. LilyPond can be compiled from
86 a local Git repository (for developers), or from a downloaded
87 tarball (for packagers). Compiling LilyPond is a rather involved
88 process, and most contributor tasks do not require it.
90 Contributors can contact the developers through the
91 @q{lilypond-devel} mailing list. The mailing list archive is
93 @uref{http://lists.gnu.org/archive/html/lilypond-devel/}. If you
94 have a question for the developers, search the archives first to
95 see if the issue has already been discussed. Otherwise, send an
96 email to @email{lilypond-devel@@gnu.org}. You can subscribe to
97 the developers' mailing list here:
98 @uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel}.
100 @warning{Contributors on Windows or MacOS X wishing to compile
101 code or documentation are strongly advised to use @ref{Lilybuntu}
102 instead of trying to install all software dependencies
109 It is not possible to compile LilyPond on Windows, and extremely
110 difficulty to compile it on MacOS X. We have therefore made a
111 @q{remix} of Ubuntu which includes all necessary dependencies to
112 compile both LilyPond and the documentation. This can be run
113 inside a virtual machine without disturbing your main operating
118 Install some virtualization software.
120 Any virtualization tool can be used, but we recommend VirtualBox:
123 @uref{http://@/www.virtualbox.org/@/wiki/@/Downloads}
126 In virtualization terminology, your main operating system is the
130 Download the @file{lilybuntu.iso} disk image.
133 @uref{http://files.lilynet.net/lilybuntu2.iso}
137 Install @file{lilybuntu.iso} as the @qq{client} operating system
138 on your virtualized system.
143 The latest version of lilybuntu is based on Ubuntu 9.04; if you
144 encounter any difficulties installing it, search for one of the
145 many tutorials for installing Ubuntu 9.04 as a client operating
149 When @file{lilybuntu.iso} boots, it automatically selects @qq{Try
150 Ubuntu without any change to your computer}; instead of this, you
151 must select @qq{Install Ubuntu}.
154 If possible, use at least 700 MB of RAM (1GB would be better) for
155 the virtual machine, and use a dynamically expanding virtual hard
156 drive. A complete compile of everything (code, docs, regression
157 tests) can reach 10 GB.
160 At the partitioning stage, do not be afraid to select @qq{use
161 entire disk}, since this refers to your @emph{virtual disk}, not
162 your machine's actual hard drive.
167 Do any extra configuration for your virtualization software.
169 VirtualBox has extra @qq{guest additions} which can make the
170 virtualization easier to use (full-screen, easy file sharing
171 between host and client operating systems, shared clipboards,
177 From the @code{Devices} menu of VirtualBox, select @code{Install
181 From the @code{Places} menu of Ubuntu, select
182 @code{VBOXADDITIONS_}. A file-system window will open.
185 Double-click on the @file{autorun.sh} file, then select @qq{Run in
189 Once the script is finished, reboot your Virtual Machine to
190 complete the installation.
194 If you use other virutalization software, then follow the normal
195 procedures for your virtualization software with Ubuntu 9.04 as
200 Follow instructions for Linux when reading instructions about
201 @ref{Working with source code}, or @ref{Compiling}.
204 Advanced note: not all hardware is supported in all virtualization
205 tools. In particular, contributors have reported problems with
206 USB devices. If you would like to investigate further, then look
207 for help for your virtualization tool using your normal OS as the
208 @qq{host} and Ubuntu as the @qq{client}.
216 We have a semi-formal system of mentorship, similar to the
217 medieval @qq{journeyman/master} training system. New contributors
218 will have a dedicated mentor to help them @qq{learn the ropes}.
220 @warning{This is subject to the availability of mentors; certain
221 jobs have more potential mentors than others.}
223 @subheading Contributor responsibilities
228 Ask your mentor which sections of the CG you should read.
231 If you get stuck for longer than 10 minutes, ask your mentor.
232 They might not be able to help you with all problems, but we find
233 that new contributors often get stuck with something that could be
234 solved/explained with 2 or 3 sentences from a mentor.
237 Send patches to your mentor for initial comments.
240 Inform your mentor if you're going to be away for a month, or if
241 you leave entirely. Contributing to lilypond isn't for everybody;
242 just let your mentor know so that we can reassign that work to
246 Inform your mentor if you're willing to do more work -- we always
247 have way more work than we have helpers available. We try to
248 avoid overwhelming new contributors, so you'll be given less work
249 than we think you can handle.
254 @subheading Mentor responsibilities
259 Respond to questions from your contributor(s) promptly, even if
260 the response is just @qq{sorry, I don't know} or @qq{sorry, I'm
261 very busy for the next 3 days; I'll get back to you then}. Make
262 sure they feel valued.
265 Inform your contributor(s) about the expected turnaround for your
266 emails -- do you work on lilypond every day, or every weekend, or
267 what? Also, if you'll be unavailable for longer than usual (say,
268 if you normally reply within 24 hours, but you'll be at a
269 conference for a week), let your contributors know. Again, make
270 sure they feel valued, and that your silence (if they ask a
271 question during that period) isn't their fault.
274 Inform your contributor(s) if they need to do anything unusual for
275 the builds, such as doing a @qq{make clean / doc-clean} or
276 switching git branches (not expected, but just in case...)
279 You don't need to be able to completely approve patches. Make
280 sure the patch meets whatever you know of the guidelines (for doc
281 style, code indentation, whatever), and then send it on to the
282 frog list or -devel for more comments. If you feel confident
283 about the patch, you can push it directly (this is mainly intended
284 for docs and translations; code patches should almost always go to
285 -devel before being pushed).
288 Keep track of patches from your contributor. If you've sent a
289 patch to -devel, it's your responsibility to pester people to get
290 comments for it, or at very least add it to the google tracker.