Contribute

Learn how you can contribute to OpenPrinting

OpenPrinting is the Linux Foundation workgroup that makes printing and scanning work on Linux and other Unix-like systems. When you print from Linux, the software that finds your printer, converts your document into something the printer understands and sends the job is most likely ours. The best-known part is CUPS, the printing system used by Linux and most other non-Windows systems.

The core team is small, and a lot of the work is done by volunteers and Google Summer of Code contributors. You don't need to be a programmer to help, and new words on this page are explained at the end, under A few terms explained.

Not sure where to start? Pick what fits you:

If you want to...Go toCoding?
Help someone with their printerHelp other usersNo
Tell us something is brokenReport bugsNo
Test your own printerTest printersNo
Fix docs or translateDocsNo
Fix bugs or add featuresContribute codeYes
Do a summer project with a mentorGSoCYes

Your first steps

If you have never contributed to open source before, this is a good order:

  1. Create a GitHub account. Almost everything happens there: the code, bug reports and user questions.
  2. Say hello in the Telegram chat and tell us what you'd like to help with.
  3. Read a little about how printing works today, starting with driverless printing and Printer Applications.
  4. Pick one small thing from the sections below, like answering a question or fixing a "good first issue". Ask in the chat whenever you get stuck.

Join the community

Talking to people is the easiest way in. You get help, and you find out what is needed right now.

  • Telegram chat is the quickest place for questions and informal conversation.
  • The printing-architecture mailing list is where development is discussed in detail. See lists.linux.dev to subscribe, or read the archives.
  • Mastodon and LinkedIn are for announcements.

Releases, events and GSoC updates are posted on News and Events. Please follow our Code of Conduct in all OpenPrinting spaces.

Help other users

People who can't get their printer working ask for help in OpenPrinting's Q&A forum on GitHub. If you have solved a printing problem before, you can probably help someone with theirs, and the answer stays there for the next person with the same problem.

Even if you're new, reading the questions is worth it. You quickly learn how the printing stack fits together and where users get stuck.

Report bugs

A bug report tells the developers about a problem so they can fix it. Report it in the issue tracker of the project it affects, for example CUPS or cups-filters. Search the existing issues first, it may already be reported. If you're not sure which project it belongs to, or whether it's a bug at all, ask in the Q&A forum first.

A useful report includes:

  • your operating system and CUPS version
  • your printer model and how it's connected (USB or network)
  • what you did, what you expected, and what happened instead
  • relevant logs, such as the CUPS error log

REPORTING_ISSUES.md in the CUPS repository explains step by step what to collect and how to narrow a problem down.

Please don't report security vulnerabilities in public issues, because everyone can read them. Report them privately as described in the CUPS security policy.

Broken links or wrong content on this website go to the website issue tracker.

Contribute code

All of OpenPrinting's code is on GitHub. Most of the core projects are written in C. ipp-usb is written in Go, and this website uses Next.js. Some of the main projects:

  • CUPS, the printing system itself, and libcups, the library programs use to talk to it
  • libcupsfilters and cups-filters, which convert documents such as PDFs and images into what the printer understands
  • PAPPL and Printer Applications such as the Ghostscript Printer Application, which support printers that still need a driver
  • cpdb-libs, which connects the print dialogs of desktop apps to CUPS
  • ipp-usb, which lets USB printers work without a driver
  • fuzzing, automated tests that feed random input to our code to find crashes and security bugs

How a first contribution usually goes:

  1. Read the project's README and its CONTRIBUTING.md if it has one.
  2. Pick an issue. Issues labeled good first issue are meant for newcomers.
  3. Comment on the issue to say you'd like to work on it, so two people don't do the same work.
  4. Fork the repository, make your change on a new branch and open a pull request that explains what you changed and why.
  5. Reviewers will often ask for changes. That's normal. Push the fixes to the same branch and the pull request updates itself.

A good first exercise is to build CUPS from source on a Linux machine, set up a print queue and watch the CUPS error log while you print.

To see where Linux printing is going, read about CUPS 3.x and the New Architecture in 25 years of OpenPrinting.

Test printers and releases

The developers can't own every printer model, so reports from people with real hardware are how many problems get found.

  • Try new releases of CUPS and the Printer Applications. Releases are announced on News and Events.
  • If your printer doesn't work, or only partly works, report it to the project you're using, with the details listed under Report bugs.
  • Check whether your printer is listed in the printer database or the list of driverless printers.
  • Older printers that need a driver are described in foomatic-db, the database of printers and the drivers that work with them. You can send corrections and new printers there as pull requests.

Documentation and translations

Writing and translating don't need any programming.

Google Summer of Code

Google Summer of Code (GSoC) is a yearly program where new contributors work on an open source project over the summer, guided by mentors from that project, and receive a stipend from Google. OpenPrinting takes part every year under The Linux Foundation, and several of today's mentors started as GSoC contributors.

  • The GSoC page lists past projects and contributors. The Linux Foundation GSoC wiki has the current project ideas and how to apply.
  • Start early. Get in touch and contribute well before the application period, it makes writing your proposal much easier.
  • If you have experience with printing or desktop development, you can also help as a mentor. Get in touch through the Contact Us page.

OpenPrinting also runs the Opportunity Open Source conference in India, where many contributors first meet the community.

For printer manufacturers

If you make printers, these are the best ways to get them working well on Linux:

To work with OpenPrinting on this, reach us through the Contact Us page.

You can also support OpenPrinting without writing code:

  • Donate printers, scanners or other hardware for testing.
  • Sponsor events like printing summits and OpenPrinting meetings.
  • Invite us to free software events and conferences.
  • Sponsor development as an organization, or support us financially.

See Donations and Sponsors & Supporters for details.

A few terms explained

  • CUPS: the printing system on Linux and most other non-Windows systems. It manages printers, print queues and print jobs.
  • IPP (Internet Printing Protocol): the standard language computers and printers use to talk to each other.
  • Driverless printing: modern printers that support IPP and standard formats (AirPrint, IPP Everywhere, Mopria) print without any model-specific driver.
  • Printer Application: a small program that makes an older printer, one that needs a driver, look like a driverless IPP printer.
  • PPD file: the old way of describing a printer's options to CUPS. CUPS 3.x drops them in favor of driverless printing and Printer Applications.
  • Filter: a program that converts a document into the format a printer understands.
  • Issue: a bug report or task in a project's tracker on GitHub.
  • Fork and pull request: a fork is your own copy of a repository on GitHub. A pull request asks the project to merge the changes from your copy.