User Tools

Site Tools


gsoc:google-summer-code-2020-openprinting-projects

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gsoc:google-summer-code-2020-openprinting-projects [2020/02/21 18:34]
till
gsoc:google-summer-code-2020-openprinting-projects [2020/04/17 18:08] (current)
till
Line 22: Line 22:
 Please see the [[https://​openprinting.github.io/​OpenPrinting-News-November-2019/#​future-work-of-openprinting-printerscanner-applications-and-ipp-system-service|plans for our near future work]] to get an overview of our development direction and architecture changes. Please see the [[https://​openprinting.github.io/​OpenPrinting-News-November-2019/#​future-work-of-openprinting-printerscanner-applications-and-ipp-system-service|plans for our near future work]] to get an overview of our development direction and architecture changes.
  
-=====Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service.=====+=====Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service=====
  
 Most network printers have a web interface which allows to configure the printer from any computer in the network using a web browser. Advantage is that no printer-model-specific software needs to be installed on the computer in order to configure a printer, and one has no dependency on certain supported operating systems. One can even configure printers using a smartphone. Most network printers have a web interface which allows to configure the printer from any computer in the network using a web browser. Advantage is that no printer-model-specific software needs to be installed on the computer in order to configure a printer, and one has no dependency on certain supported operating systems. One can even configure printers using a smartphone.
Line 64: Line 64:
 Desired knowledge: C programming,​ DNS-SD, IPP Desired knowledge: C programming,​ DNS-SD, IPP
  
-Code License: Apache 2.0+Code License: Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====SANE module for IPP driverless scanning===== =====SANE module for IPP driverless scanning=====
Line 86: Line 86:
 =====General Printer Application SDK===== =====General Printer Application SDK=====
  
-Classic ​printer drivers ​for CUPS-based printing environment ​consist of print filters which convert ​a known page data format (like CUPS/PWG Raster, ​PostScript, PDF, ...) into the printer'​s native data format ​and PPD (PostScript Printer Description) files which describe ​the printer's capabilities,​ user-settable options, and the way how the print filters are used.+Traditional CUPS printer drivers consist of one or more print filters ​and a metadata file (PostScript Printer Description or PPD) which describes the printer capabilities,​ options, and filters. The filters  ​convert ​common print formats such as CUPS Raster, ​JPEG, PDF, and/or PostScript ​into the printer'​s native data format ​for transmission to the printer.
  
-The PPD files and print filters have to be put into standardized directories ​of the installed ​CUPS system so that CUPS finds them and allows the selection of this printer ​driver when setting up a printer (or selects ​the driver automatically when identifying a printer as supported).+Future versions ​of CUPS will do away with support for these printer ​drivers, choosing instead to package support for non-IPP printers in Printer Applications which provide IPP emulation - see the [[https://​ftp.pwg.org/​pub/​pwg/​liaison/​openprinting/​presentations/​cups-plenary-april-19.pdf|2019 CUPS Plenary Slides]]. Some initial efforts have produced useful tools, including:
  
-This method works well in standard desktop ​and server systems using RPM or Debian packages and when the source code of the driver'​s filters is available or the driver is packaged ​for the operating system distribution in use. If the CUPS environment is provided in a sandboxed package ​[[https://​github.com/​OpenPrinting/​printing-stack-snap|like this Snap]] adding files to the CUPS installation is not possibleand in addition, one wants to provide the drivers in distribution-independent binary packages, as for example ​Snaps. Also the CUPS project is deprecating the use of PPD files.+  * ippeveprinter (part of [[https://​www.cups.org/​|CUPS]] for prototyping ​and supporting existing PostScript printers 
 +  * Printer Application framework from the Google Summer ​of Code 2019 by Dheeraj Yadav for classic (filters and PPD files) printer drivers ([[https://​github.com/​OpenPrinting/​printer-application-framework|The framework itself]], [[https://​github.com/​dheeraj135/​Printer-Application-Snaps|Snapping ​the Printer Application]]) 
 +  * [[https://​www.msweet.org/​lprint|LPrint]] for supporting DYMO and ZPL label printers 
 +  * [[https://​github.com/​michaelrsweet/​pappl|PAPPL]],​ a Printer Application framework/​library based on ippeveprinter and LPrint
  
-The solution, suggested by Michael Sweet, the author of CUPS, are Printer Applications. Printer Applications are simple daemons which emulate a driverless IPP network printer on localhost, do the conversion of the print jobs into the printer'​s format, and send the job off to the printer. And as a physical driverless IPP printer they advertise themselves via DNS-SD and provide there capability information on (IPP) request from the client. +This year's GSoC goal is to get a universal Printer Application SDK (Software Development Kit) to not only convert classic drivers but also to create new printer drivers, from scratch, without PPD files.
- +
-The IP connection between CUPS and the Printer Application allows both being in different sandboxes (for example being installed from different Snap packages) and the printer setup is completely automatic. When the Printer Application'​s daemon is running and the printer is connected and turned on, the daemon discovers the printer and automatically advertises it on the local machine via DNS-SD. Then CUPS discovers the printer and automatically sets up a print queue with an auto-generated PPD file. +
- +
-For this, in the Google Summer of Code 2019 Dheeraj Yadav has already written a Printer Application framework to convert classic (filters and PPD files) printer drivers into Printer Applications ([[https://​github.com/​dheeraj135/​Printer-Applications-Framework|The framework itself]], [[https://​github.com/​dheeraj135/​Printer-Application-Snaps|Snapping the Printer Application]]). +
- +
-In this year's GSoC we go further, as we want to get a universal Printer Application SDK (Software Development Kit) to not only convert classic drivers but also to create new printer drivers, from scratch, without PPD files.+
  
 The student'​s tasks here are The student'​s tasks here are
  
-  * Study Dheeraj'​s project and see from where the universal SDK can be started+  * Study Dheeraj'​s project and PAPPL to see from where the universal SDK can be started
   * Check which functions are needed and which are already in existing projects (like [[http://​www.cups.org/​|CUPS/​libcups]],​ [[https://​github.com/​OpenPrinting/​cups-filters|cups-filters]],​ [[https://​github.com/​istopwg/​ippsample|PWG'​s ippsample]]) to create a library, ideally in cooperations with the upstream projects.   * Check which functions are needed and which are already in existing projects (like [[http://​www.cups.org/​|CUPS/​libcups]],​ [[https://​github.com/​OpenPrinting/​cups-filters|cups-filters]],​ [[https://​github.com/​istopwg/​ippsample|PWG'​s ippsample]]) to create a library, ideally in cooperations with the upstream projects.
   * Create further needed code pieces, for printer discovery, starting of IPP service, passing jobs through driver and to printer, ...   * Create further needed code pieces, for printer discovery, starting of IPP service, passing jobs through driver and to printer, ...
   * Documentation and templates for designing the driver and making a Snap of the Printer Application.   * Documentation and templates for designing the driver and making a Snap of the Printer Application.
  
-Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD+Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS/​LPrint/​PAPPL and original creator of Gutenprint ​(msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
  
 Desired knowledge: C programming,​ DNS-SD, IPP Desired knowledge: C programming,​ DNS-SD, IPP
  
-Code License: Apache 2.0, MIT+Code License: Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====Make Printer Applications configurable===== =====Make Printer Applications configurable=====
Line 125: Line 122:
 Curremtly, as the IPP System Service standard is still very new and there are no client GUIs implemented yet, IPP printers (and CUPS) use web interfaces, accessible with a web browser, for configuration. Not that comfortable and fast, and also very different from vendor to vendor. Also this could be implemented in Printer Applications to make them configurable. Curremtly, as the IPP System Service standard is still very new and there are no client GUIs implemented yet, IPP printers (and CUPS) use web interfaces, accessible with a web browser, for configuration. Not that comfortable and fast, and also very different from vendor to vendor. Also this could be implemented in Printer Applications to make them configurable.
  
-The student'​s task is to create libraries, utilities, contribute to the [[https://​github.com/​dheeraj135/Printer-Applications-Framework|Printer Application framework]] to get configurability in the Printer Applications. One could perhaps have two students, one for IPP System Service and one for a web interface.+The student'​s task is to create libraries, utilities, contribute to the [[https://​github.com/​OpenPrinting/printer-application-framework|Printer Application framework]] to get configurability in the Printer Applications. One could perhaps have two students, one for IPP System Service and one for a web interface.
  
 Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
Line 131: Line 128:
 Desired knowledge: C programming,​ DNS-SD, IPP Desired knowledge: C programming,​ DNS-SD, IPP
  
-Code License: Apache 2.0, MIT+Code License: Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====Turn cups-browsed into a Printer Application===== =====Turn cups-browsed into a Printer Application=====
Line 147: Line 144:
 Desired knowledge: C programming,​ IPP, CUPS Desired knowledge: C programming,​ IPP, CUPS
  
-Code license: ​LGPL-2.1++Code license: ​Apache ​2.(L)GPL2 Exception (same as CUPS and PAPPL)
  
 ===== Speed/​scaling optimization of cups-browsed===== ===== Speed/​scaling optimization of cups-browsed=====
Line 163: Line 160:
 Desired knowledge: C programming,​ IPP, CUPS Desired knowledge: C programming,​ IPP, CUPS
  
-Code license: ​LGPL-2.1++Code license: ​Apache ​2.(L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====Wrapping proprietary printer drivers into a Printer Application===== =====Wrapping proprietary printer drivers into a Printer Application=====
Line 173: Line 170:
 Proprietary,​ closed-source printer drivers come as binary RPM or DEB files, or tarballs, or even self-extracting. They require a certain, in classic systems usually available, file system structure to put their files in during installation,​ and they also need some libraries which are common in classic systems. In a snap you do not have this "​standard"​ file system structure and the binaries with hard-coded paths in them choke on that. Proprietary,​ closed-source printer drivers come as binary RPM or DEB files, or tarballs, or even self-extracting. They require a certain, in classic systems usually available, file system structure to put their files in during installation,​ and they also need some libraries which are common in classic systems. In a snap you do not have this "​standard"​ file system structure and the binaries with hard-coded paths in them choke on that.
  
-A solution is to take the [[https://​github.com/​dheeraj135/Printer-Applications-Framework|Printer Application framework]] and add a chroot to it. The proprietary driver will get installed in that chroot then.+A solution is to take the [[https://​github.com/​OpenPrinting/printer-application-framework|Printer Application framework]] and add a chroot to it. The proprietary driver will get installed in that chroot then.
  
 The student'​s task is to add this functionality to the Printer Application framework and create an easy way for users to install proprietary printer drivers into that chroot-equipped Printer Application. The student'​s task is to add this functionality to the Printer Application framework and create an easy way for users to install proprietary printer drivers into that chroot-equipped Printer Application.
Line 181: Line 178:
 Desired knowledge: C programming,​ IPP Desired knowledge: C programming,​ IPP
  
-Code license: ​(L)GPL 2+, Apache 2.0, MIT+Code license: Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====Gutenprint Printer Application===== =====Gutenprint Printer Application=====
Line 189: Line 186:
 Currently, it supports printing either the classic CUPS way, by a PPD generator and a filter or by a plug-in for the GIMP. It should be rather easy to add more ways of using the core driver functionality,​ as this functionality is in a library, all capability information of the supported printers, dithering and color correction algorithms, ... Currently, it supports printing either the classic CUPS way, by a PPD generator and a filter or by a plug-in for the GIMP. It should be rather easy to add more ways of using the core driver functionality,​ as this functionality is in a library, all capability information of the supported printers, dithering and color correction algorithms, ...
  
-The new mode of using this library should be a new Printer Application which will be the student´s task to create. The Gutenprint printer application should wrap the Gutenprint library and so support all the printers the library supports. The basic structure can be like the [[https://​github.com/​dheeraj135/Printer-Applications-Framework|Printer Application framework]] but here we do not want to create the (deprecated) PPD files but instead, let the IPP server link directly with the library and serve out the printer capability information on client'​s get-printer-attributes requests.+The new mode of using this library should be a new Printer Application which will be the student´s task to create. The Gutenprint printer application should wrap the Gutenprint library and so support all the printers the library supports. The basic structure can be like the [[https://​github.com/​OpenPrinting/printer-application-framework|Printer Application framework]] but here we do not want to create the (deprecated) PPD files but instead, let the IPP server link directly with the library and serve out the printer capability information on client'​s get-printer-attributes requests. Also see Michael Sweet'​s work on [[https://​github.com/​michaelrsweet/​pappl|PAPPL]].
  
-Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Gutenprint developers, TBD+Mentors: Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS/​LPrint/​PAPPL and original creator of Gutenprint ​(msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Gutenprint developers, TBD
  
 Desired knowledge: C programming,​ IPP Desired knowledge: C programming,​ IPP
  
-Code license: (L)GPL 2+, Apache 2.0, MIT+Code license: (L)GPL 2+, Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL), MIT
  
 =====Support for IPP Fax Out===== =====Support for IPP Fax Out=====
Line 215: Line 212:
 Desired knowledge: %%C/C++%% programming,​ CUPS, IPP Desired knowledge: %%C/C++%% programming,​ CUPS, IPP
  
-Licenses: MIT, Apache, GPL 2++Licenses: MIT, Apache ​2.0 + (L)GPL2 Exception (same as CUPS and PAPPL), GPL 2+
  
 =====Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C===== =====Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C=====
Line 236: Line 233:
 Code license: GPL 2+ or MIT Code license: GPL 2+ or MIT
  
-=====Extraxt ​raster data from PDFs for direct printing=====+=====Extract ​raster data from PDFs for direct printing=====
  
 If an incoming print job is a PDF file and the printer is not a PDF printer, the file always goes through a PDF interpreter (Ghostscript,​ Poppler, or MuPDF) to get rasterized. This is needed when the file contains vector/​high-level graphics, fonts, ..., but is unneeded and can even produce bad interferences if each page is a simply a full-page bitmap (raster graphics). If an incoming print job is a PDF file and the printer is not a PDF printer, the file always goes through a PDF interpreter (Ghostscript,​ Poppler, or MuPDF) to get rasterized. This is needed when the file contains vector/​high-level graphics, fonts, ..., but is unneeded and can even produce bad interferences if each page is a simply a full-page bitmap (raster graphics).
Line 252: Line 249:
 Desired knowledge: C programming,​ CUPS Desired knowledge: C programming,​ CUPS
  
-Code license: (L)GPL 2+, Apache 2.0, MIT+Code license: (L)GPL 2+, Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL), MIT
  
 =====Real roll paper support in cups-filters===== =====Real roll paper support in cups-filters=====
Line 272: Line 269:
 Desired knowledge: C programming,​ IPP Desired knowledge: C programming,​ IPP
  
-Code license: ​(L)GPL 2+, Apache 2.0, MIT+Code license: Apache 2.0 + (L)GPL2 Exception (same as CUPS and PAPPL)
  
 =====Add printer output backends to MuPDF===== =====Add printer output backends to MuPDF=====
gsoc/google-summer-code-2020-openprinting-projects.1582310074.txt.gz · Last modified: 2020/02/21 18:34 by till