开发 / 参与
开发者和用户可以通过各种方式参与到 LibreOffice 项目中，我们欢迎每个人对该项目的贡献。
这个页面上的内容主要针对开发者。我们对所有级别的开发者开放。LibreOffice 是世界上最大、最古老、最有名气（对于 OpenOffice）的软件之一。如果您是一名学生，或者正在寻找开发相关的工作，那么在简历上写上“我为 LibreOffice 贡献过代码”将会是您简历的一大亮点。 开发者的任务是改进 LibreOffice 的代码库。首先，庞大的代码库看上去会让人望而生畏。但是，代码的文档质量正在改进，并且您将会得到现有的开发团队的协助。通过本页面的指导，您将能成功提交第一份 patch 补丁。为了让您对代码库有一个大概的概念：
Nobody understands the whole code in detail, but we have many core developers who each know part of the code in detail. This step by step guide shows an easy way going from "wanting to contribute" to successfully have the first patch merged to master.
For real-time chat we use IRC at the freenode network connect via webchat
In order to do development you need a local copy of the source code. All code is kept in git
Linux (most flavors) can be set up using the package installers. We suggest you follow Building on Linux
There are basically two ways to submit/work with patches. Those familar with Git review can use that, but we recommend a simpler tool called
Be careful when committing changes to submodules like help (and only cloning help) as the logerrit script is not available and you might not have the gerrit hook installed. For setup steps, see Development/Submodules.
Solving the first bug involves learning new tools and ways, therefore we have identified some easy bugs called Easy_Hacks. We use bugzilla where you need to create a account, to keep track of reported bugs.
Easy hacks are real bugs, but the core developers have added source code pointers and sometimes textual help instead of simply solving them, to make it easier for you to solve the bug. Select a bug from your favorite programming language (see above) that interest you EasyHacks by language and skill, as you see there are plenty to choose from. We recommend you choose one from the category "Skill level: beginner", to allow you to concentrate on all the "how do I ....".
Once you have selected a bug to solve, please do not forget to assign it in bugzilla to yourself, so others can see you are working on it. If you want to work on one of the general bugs (like converting foo to xyz), then please do not assign it to you, since many can work on that in parallel. The EasyHacks are monitored so if there are no progress after a time we will unassign it.
Of course there are also other challenges for later:
Some practical advice, based on experience, which we recommend that you follow is:
- Never make changes to your copy of master - create a branch instead.
- Keep a separate branch for each bug, and do not delete the branch until the bug-fix is merged.
- follow the Code Style (such as variable naming schemes, etc.).
- If you create new files, please use our License Header.
- Please avoid larger reformatting of the code for the time being (except for the tasks listed below) - we're pondering auto/magic ways to do that mid- to long-term.
- Update master before starting on a new bug (and run make check to confirm it compiles cleanly before you make any changes).
- Do not submit patches that depend on each other, unless being told to do so. Doing so will make your patch incapable of being merged.
- If your patch is not ready to be merged, assign -2 to it, that way reviewers know it is Work In Progress.
- Patience is a key, reviewing takes time and we are all volunteers, so expect a couple of days to pass.
1. 更新 master
Make sure your master is updated and works. If your master is too outdated, you run the risk of not being able to merge your patch.
As a rule of thumb, use the commands below if:
- your master is more than a week old.
- your new bug-fix depends on work that just got merged.
./g pull -r make make check
!! make must be 3.8.1 or higher.
Please use the -r switch, which is far more effective than simply pulling. Master is frequently broken, but normally only for a short time (committers normally react fast if they make a wrong commit).
When make completes you know you have a working master, so if make breaks while compiling your patch it is due to a problem somewhere in your code. make check runs all test cases and ensures you have a working version of LibreOffice.
You might be asked later to make changes to your patch, and if you have created and worked in a separate branch that will be very easy. Please use a new branch (from master) for every bug you work on, once the patch has been merged you can delete the branch.
git checkout -b test1
Replace test1 with your preferred name.
3. 解决该 bug
Identify the problem, correct the code, generate and test a version. Remember to supply a unit-test whenever possible to verify that the problem is solved.
There are a number of handy tools to help you
- OpenGrok - use it to search and browse the code base
- Convert java unit-test to python
- cgit commit log
- gerrit overview for LibreOffice
Do remember to do git commit -a regularly. This gives you the possibility to easily abandon part of your development, should it turn out to be a wrong path.
It is recommended that your commit messages look like:
tdf#12345 <short developer description of change, not just the bug title> <empty line> <description of what the patch does, the more words the better others understand it later>
- if there is a bugreport related to the commit, it's mandatory to start the first line with a bug reference like tdf#12345 (see details below)
- use the rest of the first line as a concise summary of your changes. The maximum length for this line is 72 characters.
- use present tense. tell what the change does. be terse. avoid "decorations" like dashes and brackets that waste space.
- if you want to provide more text than what fits the 1st line, it's mandatory to leave the 2nd line empty
- starting from the 3rd line explain what the patch does and why, and if it not obvious also how. These lines should have 80 characters length at most; split into several lines, if your comment is longer. Here you can also describe how the code used to work incorrectly before the change.
If your patch fixes a bug that is already filed in Bugzilla, then you can take advantage of automatic bug-notifications that are triggered by commit-messages: When the first line of the commit message includes a reference to a bug in the form tdf#12345, then a corresponding comment will automatically be added to the bugreport, when the change is pushed to the repository. See the announcement-thread on mail-archive.com or on fdo-listarchive for more details.
Verify that your changes don't break automated testing:
Now you can submit the patch to gerrit (see Prepare to submit patches):
./logerrit submit master
Your patch will typically be reviewed within 1-2 days. You can follow the progress in gerrit and you will also receive mail whenever there is a change. (Don't be too concerned if Jenkins reports that only the Windows build failed the automated compiling.)
In general 3 things can happen in the review:
- The committer reviewed and tested the patch successfully, then merged it to master (congratulations)
- The committer had some comments, which you need to look at
- Sometimes the patch breaks some other functionality and is marked as “Cannot merge”
In the 2 later cases, you need to update your patch.
If you look at your patch on Gerrit you will see two status codes:
The reviewers, our CI system (jenkins) and potentially yourself will use these two fields to qualify the patch.
Can be assigned -2, -1, 0, +1, +2
-2 are to be used by the author, to signal "work in progress". The -2 prevent the patch from being merged, and only the person who issued the -2 can remove it.
If you work on a larger patch, you are most welcome to upload a patch, mark it as -2, to see if it builds successfully on all platforms
-1 is used by the reviewer, if there are things in the patch that should be changed
0 is used when making comments, that has no effect on whether or not the patch should be merged.
+1 is used by the reviewer, to signal the patch is ok, but the reviewer would like a second opinion
+2 is used by the author to signal no review is needed (this can only be done by core developers, and should be used with care). The person who merges your patch, will use +2, just before merging, since only +2 can be merged. The ability to set +2 depends on the push rights of the reviewer. These rights are conferred individually.
Remark, a patch will NOT be merged as long as there are -1 or -2 unresponded to.
Can be assigned -1, 0, +1
-1 is used by the CI system if the build fails (remark this is not always a problem in your patch, but can be due to a broken master).
-1 is used by the reviewer, if the expected result cannot be seen.
0 is used when making comments, that has no effect on whether or not the patch should be merged.
+1 is used by the CI system if the build is succesfull
+1 is used by the reviewer, when the expected result has been verified.
Remark, a patch will NOT be merged unless the CI system shows a successfull build.
Checkout your branch,
git checkout test1
make the needed changes and test them. It is polite to comment the lines of code you do not want to change or where you do not agree with the committer, this is done directly in gerrit.
Once you are ready to commit again it is important you use --amend
git commit --amend -a
Important do not use the -m parameter as it will wipe out the gerrit patch id. Let git open an editor, allowing you to edit the commit message (or leave it unchanged). When editing be careful not to remove/modify the last line with the patch id.
This will ensure you update the patch, instead of generating a new one (with a new Change-Id:).
Upload the new patch set to gerrit
./logerrit submit master
我们想要将源代码向所有人公开，因此，您需要通过电子邮件发送给我们一封授权声明（请使用 "<您的姓名> license statement" 格式做邮件标题），邮件请发至：email@example.com，需要包含以下内容：
All of my past & future contributions to LibreOffice may be licensed under the MPLv2/LGPLv3+ dual license.
A slight variation to suit your personal taste is fine as long as the intention is clear. You will receive a welcome message in response. We keep a list of developers in our wiki.
Please only send the statement no earlier than when you post your first submission to gerrit. If you are underage, ask your parents or legal guardians to send the email (all persons having guardianship).
If you will be contributing artwork that will be included with the software (such as icons), add this to your license statement email:
Additionally, to the extent possible under law, I waive all copyright and related or neighboring rights to my past & future Artwork and Design contributions to the LibreOffice project, and similarly to The Document Foundation, placing such contributions under CC0: https://creativecommons.org/publicdomain/zero/1.0
Experienced contributors will help you find solutions to your problems, but there are expectations and limits. Remote mentoring and troubleshooting has a greater cognitive load compared to being physically present. Showing you are well-prepared makes people more motivated to help you.
- When using the chat, immediately describe your problem and stay in the channel for at least an hour.
- For sharing text with multiple lines in the chat, use a paste service such as the one mentioned in the channel topic.
- If you have network connection issues, the mailing list works better than the chat.
- If you are doing a complex multi-step task, it is a good idea to keep personal notes. These will come in handy when you are asked what you did so far.
- After receiving a reply, acknowledge it somehow. If you disappear without a trace, your helpers will feel distressed.
If you are facing an issue with git, patch submission or setting up the development environment, it is best to follow these steps:
- Try to search for the how-to or solution yourself. Sometimes your helpers have to search as well.
- If your search was successful, make an attempt to follow the instructions.
- If you did not find any instructions or got stuck applying them, ask for help.
With these types of issues, helpers are quite happy to try and solve your entire problem for you.
If you are solving an easy hack, it is good to keep these facts and tips in mind:
- There is no single document explaining the code base in prose. Educational material is scattered across conference presentation slides, blog posts and wiki pages.
- The frequency of code comments is less than ideal (you can help!), so you should be prepared to read code.
- Use git grep and OpenGrok to find the definitions of the functions and classes you run into.
- Investigate the commit history, also for similar topics elsewhere in the code base. OpenGrok's Annotate command can be revealing for this type of detective work.
- Run a debugger while using LibreOffice to find out what is going on under the hood.
- Browse the readme files.
If you ask someone to say how to implement something, you will probably be faced with silence. Easy hacks are supposed to be a learning experience and mentors do not want to ruin it. A proposed implementation will be commented on in the review system.