Contributing to Emacs Development
Emacs is a collaborative project and we encourage contributions from anyone and everyone. There are many ways to contribute to Emacs:
- find and report bugs; Bugs.
- answer questions on the Emacs user mailing list https://lists.gnu.org/mailman/listinfo/help-gnu-emacs.
- write documentation, either on the wiki, or in the Emacs source repository (Sending Patches).
- check if existing bug reports are fixed in newer versions of Emacs https://debbugs.gnu.org/cgi/pkgreport.cgi?which=pkg&data=emacs.
- fix existing bug reports.
- implement a feature listed in the
etc/TODOfile in the Emacs distribution, and submit a patch. - implement a new feature, and submit a patch.
- develop a package that works with Emacs, and publish it on your own or in GNU ELPA (https://elpa.gnu.org/).
- port Emacs to a new platform, but that is not common nowadays.
If you would like to work on improving Emacs, please contact the maintainers at the emacs-devel mailing list. You can ask for suggested projects or suggest your own ideas. If you have a feature request or a suggestion for how to improve Emacs, the best place to send it is to bug-gnu-emacs . Please explain as clearly as possible what change you would like to see, and why and how you think it would improve Emacs. If you have already written an improvement, please tell us about it. If you have not yet started work, it is useful to contact emacs-devel before you start; it might be possible to suggest ways to make your extension fit in better with the rest of Emacs. When implementing a feature, please follow the Emacs coding standards; Coding Standards. In addition, substantial contributions require a copyright assignment to the FSF; Copyright Assignment. The development version of Emacs can be downloaded from the repository where it is actively maintained by a group of developers. See the Emacs project page https://savannah.gnu.org/projects/emacs/ for access details. It is important to write your patches based on the current working version. If you start from an older version, your patch may be outdated (so that maintainers will have a hard time applying it), or changes in Emacs may have made your patch unnecessary. After you have downloaded the repository source, you should read the file INSTALL.REPO for build instructions (they differ to some extent from a normal build). If you would like to make more extensive contributions, see the CONTRIBUTE file in the Emacs source tree for information on how to be an Emacs developer. That file is distributed as part of the source tarball of every released Emacs version, and can also be found on-line in the Emacs on-line source repository. If you cloned the Emacs repository, per the instructions in https://savannah.gnu.org/projects/emacs/, you will find this file in the top directory of the source Emacs tree. For documentation on Emacs (to understand how to implement your desired change), refer to:
- Emacs Manual.
- Emacs Lisp Reference Manual.
- https://www.gnu.org/software/emacs
- https://www.emacswiki.org/
Coding Standards
Contributed code should follow the GNU Coding Standards https://www.gnu.org/prep/standards/. This may also be available in info on your system. If it doesn't, we'll need to find someone to fix the code before we can use it. Emacs has additional style and coding conventions:
- Tips Appendix.
- Avoid using
defadviceorwith-eval-after-loadfor Lisp code to be included in Emacs. - Remove all trailing whitespace in all source and text files.
- Use
?\sinstead of?in Lisp code for a space character.
Copyright Assignment
The FSF (Free Software Foundation) is the copyright holder for GNU Emacs. The FSF is a nonprofit with a worldwide mission to promote computer user freedom and to defend the rights of all free software users. For general information, see the website https://www.fsf.org/. Generally speaking, for non-trivial contributions to GNU Emacs and packages stored in GNU ELPA, we require that the copyright be assigned to the FSF. For the reasons behind this, see https://www.gnu.org/licenses/why-assign.html. Copyright assignment is a simple process. Residents of many countries can do it entirely electronically. We can help you get started, including sending you the forms you should fill, and answer any questions you may have (or point you to the people with the answers), at the emacs-devel@@gnu.org mailing list. (Please note: general discussion about why some GNU projects ask for a copyright assignment is off-topic for emacs-devel. See gnu-misc-discuss instead.) A copyright disclaimer is also a possibility, but we prefer an assignment. Note that the disclaimer, like an assignment, involves you sending signed paperwork to the FSF (simply saying "this is in the public domain" is not enough). Also, a disclaimer cannot be applied to future work, it has to be repeated each time you want to send something new. We can accept small changes (roughly, fewer than 15 lines) without an assignment. This is a cumulative limit (e.g., three separate 5 line patches) over all your contributions.