Joint PWG/OP Summit called to order by Smith Kennedy at 10am US Eastern. These minutes were prepared by Ira McDonald.
Attendees (at one or more OP Summit sessions)
- Aveek Basu (Lexmark, OP GSoC Guru, call-in) - Zdenek Dohnal (Redhat, OP GSoC Mentor, call-in) - Benjamin Gordon (Google, Chrome OS, call-in) - Piyush Goyal (OP GSoC, call-in) - Till Kamppeter (Canonical, OP Manager, call-in) - Sean Kau (Google, Chrome OS, call-in) - Smith Kennedy (HP Inc, PWG Chair, call-in) - Jeremy Leber (Lexmark, PWG Vice-Chair, call-in) - Ira McDonald (High North, PWG Secretary, IPP WG Co-Chair, OP Chair, call-in) - Piotr Pawliczek (Google, call-in) - Michael Rhines (Qualcomm, call-in) - Anthony Suarez (Kyocera Document Solutions, call-in) - Alan Sukert (Independent, IDS WG Chair, call-in) - Mike Sweet (Lakeside Robotics, IPP WG Secretary, call-in) - Paul Tykodi (TCS, IPP WG Co-Chair, call-in) - Michael Vrhel (Artifex, Ghostscript, call-in) - Bill Wagner (TIC, former Cloud WG Chair, former WIMS WG Chair, call-in) - Uli Wehner (Ricoh, call-in) - Steven Young (Canon, call-in)
Agenda
- Discussion - See slides - Linux Markets and Distributions - Linux Internet public server market share in May 2020 – 44% Linux / 25% Windows / 31% other/unknown - https://w3techs.com/technologies/overview/operating_system - Linux Web Server market share in May 2020 – 43% Linux / 25% Windows / 32% other/unknown - https://w3techs.com/technologies/comparison/os-linux,os-windows - Linux mobile OS market share in May 2020 – 72% Android / 27% iOS / 1% other/unknown - http://gs.statcounter.com/os-market-share/mobile/worldwide - Linux distributions popularity on Distro Watch in 2020 – Manjaro, Mint, Ubuntu, Debian, Fedora, openSUSE, CentOS - https://distrowatch.com/dwres.php?resource=popularity - OpenPrinting Highlights 2020 and GSoC / GSoD / LFMP 2020 - see OP Plenary slides and Aveek's slides - OpenPrinting Highlights 2021 - OpenPrinting celebrates 20 years of printing with free software! - https://linuxplumbersconf.org/event/7/contributions/748/attachments/681/1265/20 -Years-on-Printing-with-Free-Software.pdf - CUPS OpenPrinting - See CUPS Plenary slides - Developers – Mike Sweet and Linux community - Releases – v2.3.3op1 (20 November 2020) and v2.3.3op2 (1 February 2021) - Ubuntu 21.04 (22 April 2021) shipped with CUPS v2.3.3op2 - Development is approaching CUPS v2.4.x - CUPS Filters Highlights - See CUPS Filters presentation tomorrow - Developers – Till Kamppeter and Linux community - Releases – v1.27.5 (5 June 2020) thru v1.28.8 (25 March 2021) - Ubuntu 21.04 (22 April 2021) shipped with CUPS Filters v1.28.8 - PAPPL (Printer Application) - See PAPPL slides - Developers – Mike Sweet and Linux community - Releases – v1.0.0 (11 December 2020) thru v1.0.3 (21 April 2021) - PostScript Printer Application - See PAPPL slides - Developers – Till Kamppeter and Linux community - Started on 26 October 2020 - https://lists.linuxfoundation.org/pipermail/printingarchitecture/2020/003899.html - Mostly complete – a few PAPPL features are still pending - CUPS Snap (Printing Stack Snap) - See CUPS Snap slides - Developers – Till Kamppeter and Linux community - CUPS Snap project started in October 2017 - https://github.com/OpenPrinting/cups-snap - CUPS Snap is now in Snap Store - https://snapcraft.io/cups - Driverless - See CUPS Filters slides - Nidhi Jain, LFMP 2020 added IPP FaxOut support - IPP over USB - See CUPS Filters slides - ippusbxd development discontinued - ipp-usb in Go replaces ippusbxd in most Linux distributions - Google Chrome OS has its own IPP-over-USB daemon in Rust - Scanning - See CUPS Filters slides - Mopria just published eSCL specification in April 2021 - sane-airscan supports eSCL / WSD – Not integrated w/ IPP Scan Service or IPP System Service - Scan integration w/ the IPP ecosystem is an open topic - OP GSoC / GSoD / LFMP 2021 - See Aveek's slides - OP Next Steps - Call for Participation - OP is cost-effective for printer vendor support of Linux & UNIX - PWG and OP Collaboration - OP GSoC and LFMP implementations of PWG IPP specs - OP printer setup tool of the future – List of installed Printer Applications, which printers are set up with them, and buttons leading to their web interfaces - OP monthly teleconferences on Tuesdays - Tuesday 18 May 2021 1-2pm US EDT (F2F review/GSoC status) - Tuesday 8 June 2021 1-2pm US EDT (GSoC status) - Tuesday 6 July 2021 1-2pm US EDT (GSoC status)
- Discussion - See slides - GSoC 2020 Projects - 7 projects/students - 14 mentors - Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service - Common Print Dialog Backends (CPDB) Qt implementation - IPP Scan (or virtual MF device) server (Scanner Application) - General Printer Application SDK - Make Printer Applications configurable - Speed/scaling optimization of cups-browsed - Extract raster data from PDFs for direct printing - GSoC 2021 Projects - 5 projects/students - 16 mentors - cups-filters: Create a single, universal CUPS filter to replace the chain of individual filters - Firmware and other file handling in PAPPL - GUI for listing and managing available IPP Print/Scan services (or DNS-SD- advertised network services in general) - Converting filters to filter functions - cups-filters: Make sure all filter functions work without PPD files - Demo of GSoD 2020 documentation project (Piyush Goyal) - https://openprinting.github.io/documentation/ - https://openprinting.github.io/documentation/01-printer-application/ - Linux Plumbers Conference 2020 Virtual F2F - https://www.youtube.com/watch?v=MPGh9FUW4as&t=8412s - Upcoming for 2021 - OP plans to participate in Plumber’s 21 & Linux Foundation Mentorship Program
- Discussion - See slides - Changes to GS since last OP Summit in 2020 - Release 9.52 March 2020 - Implementation of fillstrokedevice method (fixes issues with transparency in those operations) - Zero Coverity issues achieved (will be maintained moving forward) - Introduction of SIMD acceleration methods for commercial licenses (Transparency blending, interpolation, halftoning, color conversion) - Moved to Visual Studio 2019 solution - Release 9.53 September 2020 - Bindings provided for Python, Java, and C#. Example usage is given in the demos folder – more about this later. - Build with Tesseract OCR engine. Devices pdfocr8/pdfocr24/pdfocr32 render to an image, OCR that image, and output the image "wrapped" up as a PDF file, with the OCR generated text information included as "invisible" text. - Allows creation of fully redacted PDF output. - Updates made to the API. See https://www.ghostscript.com/doc/API.htm - It was announced that OpenPrintingVector/Raster Printer Drivers (that is, the opvp and oprp devices) deprecated and will be removed in the future. That decision was reversed after finding that the opvp device was being used by some vendors. - Reintroduction of the patch level to the version number. Helps facilitate handling security related issues. - Release 9.54 March 2021 - Overprint (and spot color) simulation available to all output devices, allowing quality previewing/proofing of PDF jobs that rely on overprint. - Introduction of"docxwrite" device. Adds the ability to output to Microsoft Word "docx" format. - The pdfwritedevice can make use of Tesseract OCR engine to improve searchability and copy and paste functionality when the input lacks the metadata for that purpose. - Introduction of a "map text to black" function, where text drawn by an input job can be forced to draw in solid black. - N-up imposition. -sNupControl=number1xnumber2 - Changes to MuPDF since last OP Summit in 2020 - Release 1.17: May 2020 - API: Improved accessors for markup/ink/polygon annotation data. Chapter based API for faster EPUB loading. Add more documentation to header files. Improved digital signature signing and verification. Validate changes in a signed PDF file. - Build: Moved windows build to VS2019 solution. - PDF: Redaction now works on images and links as well as text. Greek, Cyrillic, Chinese, Japanese, and Korean scripts in forms and annotations. File attachment annotations. Use CCITT Fax compression for 1-bit images when creating PDF files. - EPUB: More forgiving XHTML parsing. Accelerator files to cache chapter data for faster EPUB loading. Optimized memory use. - mutoolrun: Edit Markup, Ink, and Polygon annotation data. Fill out form fields. - viewer: Ask for confirmation before closing a PDF with unsaved changes. Embed and extract file attachment annotations. - Release 1.18: September 2020 - API: C++ and Python bindings. Python bindings available with pip install mupdf. De-hyphenation option in structured text extraction. Added methods for pdf annotation/signature date management. Added choice of image redaction algorithms: none, full, partial. Optional use of Tesseract to use OCR to extract text. - mupdf-gl: Added IBM Common User Access shortcuts for copy & paste. Improved redaction UI. - PDF: High security redaction --save redacted PDF as flattened bitmap, guaranteed to not leak any sensitive redacted information. - Java: Example desktop Java viewer. - HTML5: Added parser. - Little CMS2MT - We continue to use a fork of Little CMS2 that is thread safe. - Fork is currently available with git checkout of Ghostscript. - We bring in any bug fixes applied to Little CMS2. - Developed SSE4.2, AVX2, NEON plug-in for tetrahedral interpolation with cmyk, rgb, or gray output. (Commercial license only) - MuJS - MuJS is a library, written in C. - MuJS has no notion of a main program: It only works embedded in a host client program. The host program can invoke functions to execute Javascriptcode, read and write Javascriptvariables, and register C functions to be called by Javascript. - Implements EMCAScriptECMA-262 - Open source under ISC license https://opensource.org/licenses/ISC http://git.ghostscript.com/?p=mujs.git;a=summary - MuPDF WebAssembly - Binary instruction format for a stack-based virtual machine. - Wasm is designed as a portable target for compilation enabling deployment on the web for client and server applications. - Ghostscript API Bindings - In ghostpdl/demos folder: C – Contains a VS project that exercises API C# – Contains simple demo viewer for Windows (WPF UI) and for Linux (MONO with GTK UI). Mimics C API but has helper methods to extend API Java – Contains simple Java demo viewer. Mimics C API but has helper methods to extend API Python – Mimics C API. Has demo example usage (ghostpdl\demos\python\examples.py) - Code Security/Analysis Methods - Fuzzing of test files used to detect simple faults - Coverity: https://scan.coverity.com/projects/ghostpdl(dereferences of NULL pointers, use of uninitialized data, memory corruptions, buffer overruns, control flow issues, incorrect expressions, unsafe signed values) - Coverage tests run periodically: https://ghostscript.com/coverage/ - Various compilers used and warning report provided with every commit (gcc, clang) - Address Sanitizer: Testing for buffer overflows, dangling pointer overflows - Valgrind: Testing for buffer overflows, use of uninitialized memory/variables - Memento: Memory leak/corruption analyzer and “Memory Squeezing”. Part of Ghostscriptbuild memento.h/c - Current/Future Work - New PDF interpreter in Ghostscript. Significant progress. See pdfibranch in repository - Ghostscriptdevice interface cleanup: https://www.notion.so/The-Great-Device-Rework-Of-2021-94092fe1395d4a088b91462f0ca5038a - Resolution independent display list for Ghostscript. - Digital signatures. - Docx output for Ghostscript.
- Discussion - See slides - What is ChromiumOS? - Gentoo Derivative - Everything is built from source - Supports a variety of ARM and amd64 architectures - Open Source - https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/refs/heads/main/net-print/ - Open Source Projects Used - CUPS - Print spooling - Driverless support - cups-filters - gstoraster - pdftops - foomatic-rip - Ghostscript - Scanning - sane-airscan - SANE - avahi + nss-mdns - mDNS hostname resolution - Features in Chromium - mDNS detection - Driverless support - Matching printers with PPDs - Recent Improvements - Expanded lpadmin errors - Improved reporting of Driverless setup failures - Expanded testing through automation - Testing of the filter pipeline - More validation of individual filters - New Projects - foomatic_shell - https://chromium.googlesource.com/chromiumos/platform2/+/master/foomatic_shell - Written by Google - Replaces Bash for as used by foomatic-rip - Validates shell commands - Validates Ghostscript flags - Implements Bash-isms common in Foomatic PPDs - virtual-usb-printer - https://chromium.googlesource.com/chromiumos/third_party/virtual-usb-printer/ - Software emulation of an IPP-over-USB printer - IPP Responses configured via JSON - Working on enhancements to simulate printer quirks - ippusb_bridge & udev - https://chromium.googlesource.com/chromiumos/platform2/+/master/ippusb_bridge - Handles HTTP requests and converts them to USB BULK OUT - Manages USB connections - Differences from https://github.com/OpenPrinting/ipp-usb - Implemented in Rust - Smaller exe size on disk - Doesn’t advertise devices on network - Listens on local unix sockets - Releases USB interfaces between connections to allow sharing - Needs one copy per device - Scanning - Architecture - Backend based on SANE - Middle layer that loads libsane in a sandbox and translates Chrome <-> SANE API https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/lorgnette/ - Frontend written and open sourced in Chromium https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ash/scanning/ - Primarily concentrating on eSCL through sane-airscan - Shares ippusb_bridge with printing to scan over USB - Scanning Questions - No standard for responding to scans initiated on the scanner - eSCL can produce JPG directly, but we have to roundtrip through SANE frame formats
- Discussion - See slides - Introduction - CUPS is the standards-based, open source printing system developed by OpenPrinting for Linux® and other Unix®-like operating systems. CUPS uses IPP Everywhere™ to support printing to local and network printers - CUPS is provided under the Apache License v2.0 with an exception that allows linking to GPL2-only software (like Gutenprint) - The CUPS web site, source code, and bug database are hosted on Github https://openprinting.github.io/cups https://github.com/openprinting/cups/ - But wait, I thought that Apple was developing CUPS?!? - Apple, OpenPrinting, and CUPS - Apple hasn't been actively developing CUPS since Mike left in December 2019 - Two security fixes and an update to the USB backend to support Apple Silicon-based Macs have gone into CUPS 2.3.3 and 2.3.4 - OpenPrinting decided to fork Apple CUPS in September 2020 - Initial goal was to merge all the common Linux/BSD patches - Have a development team consisting of core CUPS packagers with many volunteers - OpenPrinting has released two updates to Apple CUPS 2.3.3: - November 27, 2020: OpenPrinting CUPS 2.3.3op1 (bug fix update) - February 1, 2021: OpenPrinting CUPS 2.3.3op2 (security update) - OpenPrinting is now working towards a CUPS 2.4.0 feature release - Mike has been contracted by Apple to apply important OpenPrinting CUPS bug fixes to Apple CUPS on macOS, which will continue to use CUPS 2.3.x - This work is ongoing and will yield an Apple CUPS 2.3.5 release in June 2021 - While Apple would like to continue sharing bug fixes going forward, they are not interested in further development of CUPS features for macOS - CUPS 2.4 - Next Feature Release - Add AirPrint/Mopria compatibility (done) - Shared printers now report all required attributes/keys/values - Ready media returns a list of supported values configured for the system - Add OAuth 2.0/OpenID authentication (to-do) - Used for Microsoft Universal Print Service, among other things - Add pkg-config support (done) - Provides cups-config functionality through pkg-config - Add snapcraft support (mostly done) - "job-sheets-col" and better "media-col" attribute support (to-do) - TLS and X.509 improvements (to-do) - New deprecations: cups-config and Kerberos authentication (done) - CUPS 2.4 - OAuth 2.0 / OpenID - Replacement for Kerberos SSO - Doesn't require root access or user changing gymnastics like Kerberos - Many open source solutions available, including my own: - https://www.msweet.org/moauth - SAML and Webauthn authentication backends are commonly available, too - Support OpenID/RFC 8414 compliant OAuth 2.0 authorization servers - Authorization server is reported via IPP "oauth-authorization-server-uri (uri)" attribute - Bearer and refresh tokens will be cached per-user/auth-server - Authorization UI will be presented using embedded web view - only available when printing from system console - Command-line tool for registering bearer token, too - Deprecations - See slides - CUPS 3.0 - Modular Printing Architecture - Commands: lp, lpr, lpstat, cancel, etc. - Local Server - Handles local print requests for desktop/mobile devices - Only temporary IPP Everywhere print queues - Runs as user - UNIX domain socket and/or D-Bus API and/or XPC API - Sharing Server - Handles network print requests and local printing on headless servers - Full print accounting/ACLs/pre-processing of documents - OAuth 2 and PAM-based authentication - IPP Shared Infrastructure Extensions / System support - Library: libcups, as exists today - CUPS 3.0 - Challenges - Much broader scope and integration than the original CUPS work - Desktop support - need to uplift GNOME/KDE/XFCE desktops to new D-Bus API for printing, authorization, consent UI - Need developers to work on the local and sharing servers, desktop UI/services - Can probably use/adapt PAPPL code for the core server bits - Much of the print dialog work can be repurposed - Probably have existing authorization/notification UI we can use - Graphics libraries - current PDF tools/libraries have problematic licenses or other limitations
- Discussion - See slides - Printer Applications Are... - A replacement for CUPS printer drivers - Options are replaced by IPP attributes - Driver-specific UI is provided by the Printer Application - An implementation of an IPP Everywhere™ Printer - Basic IPP Everywhere support only requires PWG Raster, plus JPEG for color printers - CUPS library and sample code provide an easy-to-use framework for implementations - Compatible with CUPS 1.4 and later - Can be compatible with iOS® 5 and later with a few small additions (DNS-SD subtype and "image/urf" document format) - macOS 10.8® and later support IPP Everywhere™ via the command-line, can be used from the GUI with the same changes needed for iOS support - PAPPL: Printer Application Framework - Web site and Github repository: - https://www.msweet.org/pappl - https://github.com/michaelrsweet/pappl - A simple CUPS-based C framework/library for developing Printer Applications or firmware for any kind of printer or driver on desktops, servers, and in embedded environments - Supports JPEG, PNG, PWG Raster, Apple Raster, and "raw" printing to printers connected via USB and network (AppSocket/JetDirect) connections - Works with AirPrint™ (iOS/macOS), IPP Everywhere™ (ChromeOS, Linux), and Mopria® (Android/Windows 10) clients out-of-the-box - Will soon be in shipping printers - Licensed under the Apache License Version 2.0 with an exception to allow linking against GPL2/LGPL2 software - PAPPL: Key Contributors - Michael Sweet (Lakeside Robotics): lead developer - Jai Luthra (GSoC 2020): auto-setup, hp-printer-app, networking improvements, DNS-SD and SNMP discovery, papplMainloop API, snapcraft prototyping - Sambhav Dusad (GSoC 2020): job persistence, live log viewer, test pages, web interface enhancements - Didier Raboud (Debian Project): documentation and packaging - PAPPL: Releases - December 11, 2020: v1.0 - First production release - January 12, 2021: v1.0.1 - Bug fix release, vendor attribute improvements - February 20, 2021: v1.0.2 - Bug fix release, attribute validation improvements, allow updating the version information - April 21, 2021: v1.0.3 - Final 1.0.x bug fix release - PAPPL: Objects - See slides - LPrint - Web site and Github repository: - https://www.msweet.org/lprint - https://github.com/michaelrsweet/lprint - Supports a variety of common label and receipt printers connected via network or USB - Currently all Dymo and Zebra label printers, looking at adding others... - v1.0 was released on February 17, 2020 and formed the basis of PAPPL - v1.1 was released on ???? ??, 2021 and uses PAPPL - Gutenprint Printer Application - Web site and SourceForge repository: - http://gutenprint.sf.net/ - https://sourceforge.net/projects/gimp-print/ - Sambhav Dusad (GSoC 2020 student) started the effort late in 2020 but so far nothing has been pushed to the repository
- Discussion - See slides - Introduction - In the Snap Store: https://snapcraft.io/ps-printer-app - PAPPL-based - First working model and production-ready Printer Application for standard A4/Letter office printers - First retro-fitting Printer Application - First Printer Application for high-level/vector graphics output format - First project really exercising PAPPL leading to many bug reports and feature requests where most got fixed/implemented - Supports 1000s of PostScript printers by ~4000 included PPDs, a generic PPD, and possibility to upload original PPD which comes with printer - PPD file handling - Everything based on libppd - Lists PPDs with duplicate elimination, user-friendly sorting - Auto-assigns PPD to make/model from device ID, generic PPD to CMD: of device ID - Lists standard, vendor-specific, and installable accessory options - Associates standard options with IPP attributes and ready media - Modifies Printing Defaults list depending on installed accessories - Adds PPD's PostScript code to job data streams - Printers can be queried for option defaults and installed accessories if PPD supplies appropriate PostScript code - Allows user to add his own PPDs, checks file format, rejects and warns, prefers user PPDs on auto-assigning to printer, allows removal - Further Properties - Uses filter functions to print PDF and PostScript input data, to have no in-between raster step, maintaining maximum print quality - PostScript jobs are not passed through unfiltered/raw, but always with PPD code applied - Uses PAPPL's raster printing functionality to print raster input, allowing completely streaming and "infinite" jobs, conversion to grayscale, and to dithered bi-level (for fast draft printing) - A4/Letter auto-selection by locale environment variables - The ~4000 PPDs (from foomatic-db and HPLIP) in the Snap are compressed with pyppd - Next Steps - Nearly feature-complete, missing parts are due to pending features in PAPPL: - Human-readable strings for vendor options - Internationalization/Localization - Ink level check, like CUPS does via SNMP in backends - Base for future retro-fitting Printer Applications, we will spin out most retro-fit-relevant functionality into a new library
- Discussion - See slides - 20 Years of OpenPrinting! - In the beginning of 2000, Till Kamppeter discovered CUPS, and as sys admin he installed it and improved printing a lot! - Thanks, Michael Sweet! - Till I wrote the first free software print dialog with easy option settings, got invited to LinuxTag and then to MandrakeSoft - In August 2000, Till started at MandrakeSoft in Paris to move the distro from LPD to CUPS - In fall 2001, Till was one of the founders of OpenPrinting, with Ira McDonald, Michael Sweet, and others on the VA Linux Printing Summit in San Francisco - With Till's, Mike's, and others' upstream work the other distros also switched to CUPS. R. I. P., LPD/LPRng. - In 2006, Till and Ira organized the first OpenPrinting Summit and we continued annually up to now - Since 2008, annual participation in the Google Summer of Code (as the Linux Foumdation, but most projects are OpenPrinting) - Since 2016, Aveek Basu is our GSoC program manager, especially active on building the community - Now after 20 years, next major architecture change: Driverless printing and scanning, all "just works" out-of-the-(sand)box, all-Snap distros, ... - cups-filters: Introduction - cups-filters takes up everything from CUPS which Mac OS X does not need (CUPS 1.6.x) – Started end of 2011 by OpenPrinting, overtaking most of CUPS’ filters – Switched filters over from PostScript-centric to PDFcentric workflow – cups-browsed introduced end of 2012, to introduce browsing of DNS-SD-advertised remote CUPS queues, as CUPS dropped its own broadcasting/browsing – 10 years of further development added things like driverless printing support, clustering, support for Printer Applications, IPP standards, ... - cups-filters Development: Filters - New features: - Filter functions: Converted the CUPS filters into library functions (in libcupsfilters) - Called by Printer Applications without executable call overhead - Conserve years of coding work in filters - Control both via IPP Job/printer attributes and PPDs - All have same call scheme - Auxiliary functions to chain them, connect with file descriptors, no need to fork() manually - CUPS filters are wrappers around filter functions - pclmtoraster: Convert raster-only PDFs (PCLm, also scanner output) into raster image files, for higher print output quality and converting scanned files. - Vikrant Malik, GSoC 2020. - Planned: - Wrapper filter function to call conventional CUPS filter/backend (e.g., for retro-fitting proprietary driver) - Let filter functions check color space/depth of input file and check available color depths/spaces in printer IPP attributes/PPD, print-quality, and print-content-optimize setting to select most suitable quality - cups-filters Development: libppd - New PostScript handling library, libppd: - To be used for retro-fitting classic PPD/filter drivers into Printer Applications - Overtaken all PPD-related functions from libcups - Will get removed from libcups soon - Also added CUPS-private functions to API - PPD collection handling functions (based on the code of cups-driverd in CUPS) to list and select PPDs in Printer Applications - Minimum coding effort for this obsolete data format - Separate from libcupsfilters, as only for retro-fit - Only for retro-fit, do not use for new drivers! - cups-filters Development: driverless utility - Mostly done by Nidhi Jain, LFMP 2020 – Added IPP Fax Out support - Shows Fax PPDs in printer setup tools. selecting them creates a fax queue - Support for Fax on most modern MF devices under Linux for the first time - Fax obsolete in some, but not all countries – IPPS support (show only IPPS URI if available) – Use of CUPS’ DNS-SD-service-name-based URIs - IP- and port-independent (good for local services) - --std-ipp-uris option to show standard IPP URIs - cups-filters Development: cups-browsed - Main development goal: Speed, performance, scalability - New features: – Multi-threading: Handling discovered devices and creating local queues in separate threads. GSoC 2020 project of Mohit Moran – Longer timeout for cups-browsed to tell the CUPS backend which cluster member gets the job – Do not remove created queues on shutdown: Avoid GUI notification clutter when queues are created again on restart (configurable) – Faster removal of left-over queues from previous session - Planned – Avahi browsing/resolving optimization: Get rid of unneeded, time-consuming resolving – Separate cups-browsed from cups-filters, into own OpenPrinting GitHub project – Separate cups-browsed from CUPS Snap into own Snap – Turn cups-browsed into a Printer Application - cups-filters Development: 1.x → 2.x - See slides - CUPS in a Snap - A Snap containing CUPS, cups-filters, cups-browsed, Ghostscript, QPDF -> Complete CUPS printing stack - No support for classic drivers, as filters and PPDs cannot get dropped into Snap's file system -> Printer Applications - Sorting out all the problems with Canonical’s Snap gurus on the snapcraft.io forum (see all links in README.md) - Components always up-to-date, independent of release cycles: CUPS 2.4.x, cups-filters 1.28.8, Ghostscript 9.54.0, QPDF 10.3.1 - Available in Snap Store "cups": https://snapcraft.io/cups * Properties * - Three run modes: - Stand-alone: Snap’s CUPS is the only CUPS on the system, no classic CUPS present - Proxy: Classic CUPS present, Snap’s CUPS clones the queues, is firewall for the classic CUPS - Parallel: Classic CUPS present, Snap’s CUPS runs as second, indpendent CUPS (for development only) - CUPS always listens on Snap’s domain socket, in stand-alone mode also on the standard domain socket and port 631 for unsnapped clients - To not need to create system users and groups use snapd’s "snap_daemon" for "lp" user and "adm" for "lpadmin" group - Adapted to Snap environment via cups-files.conf and file permissions, no patches - All System-V- and Berkeley-style command line tools, also special tools cupsfilter, driverless, ippfind, ipptool, ippeveprinter, ippproxy - cups-browsed included, always attaching to the Snap’s CUPS * Security Concept * - Snaps are usually completely confined and can communicate only through defined interface connections - Everyone can upload Snaps to the Snap Store but - On the user’s system only “safe” interfaces of downloaded Snaps connect automatically - "Dangerous" interfaces need to get connected manually after Snap install (if they do not have auto-connect permission from the Snap Store team) - Unconfined ("classic") need permission of the Snap Store team - For using CUPS from Snaps there are two interfaces: - "cups": For user application Snaps which print (safe) - "cups-control": Admin access to cupsd (dangerous) - Most Snap interfaces are defined only by AppArmor rules, but - "cups" vs. "cups-control" -> Snap Mediation - If cupsd receives an administrative request it accepts it only if - The client is no Snap or a classically confined Snap - The client connects via “cups-control” - User's system usually has classic CUPS, not CUPS Snap -> No Snap Mediation, therefore - "cups" interface only connects to Snap's domain socket - Application Snap installation force-installs CUPS Snap - CUPS Snap in proxy (firewall) mode and mediates requests - User stays with his queues and (often proprietary) drivers * Future Work * - Complete the security concept on the snapd side - Retro-fit all drivers which usually come with distros into Printer Applications - GUI tools, printer setup tool and print dialog adapted to the CUPS-Snap/Printer(Scanner)-Application architecture - Feature request to Snap Store: Search Snaps by hardware signature, to easily install driver Snaps - Printer Applications - PAPPL got standard framework – PAPPL provides everything required in a library – Driver developer only has to do the printerspecific parts – Tutorial for manufacturers/driver developers written in GsoD 2020 - Planned: Printer driver retro-fit library – Spin out from PostScript Printer Application - PPD handling: Listing, filtering, selecting, options, ... - Calling filter functions – Call external CUPS filters/backends - Convert: – Foomatic/Ghostscript – Gutenprint – HPLIP – SpliX – Foo2zjs – ... - For unmaintained drivers wrap filters and PPDs into Printer Application - Native Printer Applications for maintained drivers - Wrapping proprietary drivers with chroot, layout, ... - Driverless Scanning - 3 Standards – IPP Scan, open PWG standard – eSCL, proprietary, from HP, specs published recently by Mopria – WSD, from Microsoft and W3C - NOTE: TWAIN (since 1992) new alliance w/ PDF Association in April 2021 for ISO standard PDF/R (similar objectives to open standard PDF/is PWG 5102.3-2004) - http://www.twain.org/ - https://www.pdfa.org/twain-working-group-and-pdf-association-announce-pdf-r-a-pdf-technology-based-iso-standard/ - All are mainly intended for multi-function printers - eSCL and WSD one already available in AirScan devices - 2 SANE drivers for eSCL: "escl" from Thierry Hucahrd and "airscan" from Alexander Pevzner, both in most distros - Alexander has added WSD support and will add IPP Scan if needed/required - eSCL also works via IPP-over-USB (ipp-usb) - Sandboxed Scanner Drivers - Current situation: SANE - Scanner driver (SANE backend) is shared library - Scanning app (SANE frontend) links backends dynamically - To add a driver it needs to be dropped in backend dir => not good for sandboxed packaging - New scanning environment: eSCL/IPP Scan driverless - Scanner drivers in Scanner Applications, emulating driverless scanner - Scanning app is eSCL/IPP Scan client - Legacy: App uses sane-airscan SANE backend, SANE drivers enclosed in legacy Scanner Application - Michael Sweet posted scan support roadmap for PAPPL - IPP-over-USB: ipp-usb - ippusbxd simple TCP <-> USB packet relay, leaves packets in USB buffer on client closing connection, packets re-appear in next connection messing it up -> Creation of alternative ipp-usb by Alexander Pevzner - Ipp-usb written in Go, as Go has sophisticated HTTP library to read out buffer on closed connection - Ipp-usb works perfectly, especially web admin interface - Chrome OS not accepting software in Go due to high memory footprint -> Own approach in Rust - ippusbxd development discontinued - eSCL scanning and IPP Fax Out work with ipp-usb - Printing GUIs: What do we need? - Print dialog: We need to get CPDB into GTK and Qt - Printer Setup Tool - Main Window - List all IPP services as reported by DNS-SD, list Printer Applications and their queues in a group, no duplicates for IPv4/IPv6, IPPS, interfaces - Buttons for web interface, add new queue, show jobs, ... - Add Printer Wizzard - List of discovered non-driverless USB/network printers, click button to see list of Printer Applications supporting the printer, installed ones and available in Snap Store - Buttons to setup printer with selected Printer Application and to install Printer Application from Snap Store