Microsoft kondigde eerder dit jaar aan de V3- en V4-legacyprinterdrivers niet langer te ondersteunen in Windows. Vanaf 1 juli geeft Windows standaard de voorkeur aan de ingebouwde Microsoft IPP Class-driver, die via het Internet Printing Protocol (IPP) kan communiceren met elke Mopria-gecertificeerde printer. Dat systeem heeft relatief stilletjes meerdere grote problemen in printerland opgelost.
De hel van printerdrivers
Om het belang van Mopria te begrijpen, schetsen we eerst de 'oude' situatie. Daarin leverden alle printerfabrikanten hun eigen drivers, zodat Windows-systemen konden communiceren met hun apparaten. Dat systeem werkte, maar zorgde wel voor veel problemen.
Het eerste probleem was, logischerwijs, interoperabiliteit. Drivers voor het ene systeem werkten vaak niet voor het andere en dat zorgde voor de nodige complicaties. Dit was bijvoorbeeld een van de voornaamste redenen dat de introductie van Windows Vista bepaald niet soepel verliep: het besturingssysteem introduceerde een geheel nieuw driversysteem. Daardoor functioneerden veel apparaten die op Windows XP prima werkten, waaronder printers, opeens niet meer op het nieuwere Vista. Ook moeten fabrikanten drivers specifiek schrijven voor verschillende architecturen, zoals x86, x64 en Arm. Daardoor is ook het onderhoud vaak een crime.
Daarnaast zijn drivers potentieel zwakke plekken in de beveiliging van een systeem. Veel oude drivers draaien in kernelmodus, waardoor deze zeer hoge systeemrechten hebben. Dat maakt ze gevoelig voor beveiligingsproblemen. Nog vorig jaar bevatten verschillende printerdrivers van Canon een kritieke out-of-boundskwetsbaarheid. Microsoft maakte dan ook bekend dat het drivers voor randapparatuur, zoals printers, uit de kernel wil verwijderen.
in Android 4.4
Daarnaast was het erg moeilijk om via smartphones en tablets te printen. Voor Android 4.4 had het platform helemaal geen native printondersteuning, waardoor gebruikers aangewezen waren op tools van derden. Vanaf Android 4.4 implementeerde Google het Android Print Framework, maar ondersteuning voor IPP was er nog niet. Daardoor bleef het framework wat gebruiksonvriendelijk. Mensen moesten nog altijd de printserviceplug-in van de specifieke fabrikant van hun printer downloaden. In Android 8.0 veranderde dat: toen besloot Google ondersteuning voor Mopria direct in het Android Open Source Project te implementeren, waardoor ook de behoefte aan plug-ins wegviel.
IPP Everywhere vs. Mopria
IPP Everywhere en Mopria lossen deze problemen op. Die twee standaarden beogen eigenlijk hetzelfde: ze willen ervoor zorgen dat gebruikers bestanden kunnen printen zonder drivers. Het grootste technische verschil is de openheid van de standaard. IPP Everywhere is een compleet open standaard die de Printer Working Group onderhoudt. Ontwikkelaars hoeven daardoor geen royalty's te betalen om de standaard te implementeren en het protocol is tot in detail vastgelegd in officiële documenten van de PWG. Zelfcertificatietools zijn ook beschikbaar op GitHub onder een Apache-2.0-licentie. Door zijn opensourcenatuur is het bijvoorbeeld ook de motor achter CUPS, het printsysteem voor Linux-systemen, BSD-varianten en macOS, iPadOS en iOS.
van de Mopria Alliance
Mopria is een propriëtaire invulling van hetzelfde idee die wordt ondersteund door de Mopria Alliance. Deze non-profitorganisatie is in 2013 opgericht door vier grote printerfabrikanten: Canon, HP, Samsung en Xerox. Inmiddels telt de organisatie tientallen leden, waaronder Microsoft, Google, Qualcomm, Brother, Toshiba en Ricoh. Fabrikanten die hun apparaten willen voorzien van een Mopria-certificering, moeten lid zijn van de Mopria Alliance en de officiële testprocedures van de organisatie doorlopen. Aangezien Microsoft lid is van de Mopria Alliance, mag het duidelijk zijn aan welk protocol de Windows-maker de voorkeur geeft.
Printen via HTTP
Hoewel Mopria en IPP Everywhere op bepaalde manieren van elkaar verschillen, is de basis hetzelfde: beide standaarden gebruiken het IPP. Dit protocol gebruikt HTTP als transportprotocol, waarbij elk HTTP POST-verzoek een binair IPP-bericht met instructies en mogelijk het te printen bestand bevat. De printer stuurt vervolgens een antwoord terug in de POST-respons.
Bij een printopdracht via IPP communiceren systemen en printers standaard via poort 631. De client stuurt daarbij via HTTP de meta-attributen, zoals het aantal pagina's en het formaat, de printerinstellingen en de binaire documentdata. Dit kan op twee manieren: de traditionele manier is de zogenoemde Print-Job-operatie. Daarbij bundelt de client, het systeem dat wil printen, deze attributen in één HTTP-verzoek. Deze manier wordt zeer breed ondersteund, maar het betekent ook dat een printverzoek vaak niet kan worden geannuleerd wanneer het is verstuurd.
Daarom zijn deze verzoeken opgesplitst in Create-Job en Send-Document. Bij het Create-Job-verzoek stuurt de client eerst de printerinstellingen en de documenteigenschappen. Denk hierbij aan de tekenset (vrijwel altijd UTF-8), het documenttype en of het document enkelzijdig of dubbelzijdig moet worden geprint. Dit verzoek beantwoordt de printer met een unieke job-ID.
Daarna verstuurt de client de binaire payload in een aparte Send-Document-operatie die gekoppeld is aan de specifieke job-ID. Deze scheiding zorgt ervoor dat de client de printopdracht nog kan annuleren terwijl deze de documentdata verstuurt. Dit kan door een Cancel-Job-verzoek te sturen met de job-ID die de printer genereerde bij het Create-Job-verzoek.
Ook verbinding maken met de printer vereist geen drivers. Dit gebeurt over het algemeen via het door Apple ontwikkelde Bonjour-protocol of het Avahi-protocol. De printer laat via DNS Service Discovery weten dat hij beschikbaar is. Vervolgens raadpleegt de client de DNS-SD-registratie om de juiste hostnaam, het poortnummer (vaak poort 631) en het specifieke resourcepad van de printer te achterhalen. Dat is vaak /ipp/print, maar dit is geen harde eis om te voldoen aan de IPP Everywhere-standaard. Nadat de client deze informatie heeft opgehaald, voegt hij deze samen tot een Uniform Resource Identifier, een tekenreeks die apparaten gebruiken om een bron op een netwerk te identificeren. Zodra deze URI bekend is, kan de client HTTP POST-verzoeken versturen.
Interoperabel en veilig
Het grote voordeel van deze werkwijze is dat HTTP een zeer universele standaard is waarop al zo ongeveer het gehele internet is gebouwd, met alle voordelen van dien. Alle printers gebruiken nu een standaarddriver die al in het besturingssysteem zit, zoals de Mopria IPP Class Driver in Windows. Dat maakt het gehele systeem een stuk interoperabeler en makkelijker in gebruik.
Daarnaast kan IPP de beveiligingstechnologieën van HTTP gebruiken. Daarmee zijn de verzoeken die gebruikers aan hun printer sturen versleuteld met TLS, terwijl ze voorheen vaak 'gewoon' in platte tekst werden verstuurd. Daardoor is het niet meer mogelijk om met een packetsniffer zomaar documenten te onderscheppen. Ook ondersteunt IPP bestaande webauthenticatiemethoden, zoals OAuth2, waardoor het bijvoorbeeld in grote bedrijven mogelijk is om printers te bedienen met single sign-on.
Verder is HTTP natuurlijk een protocol met allerlei bekende statuscodes, die ook de status van printers en printopdrachten kunnen communiceren. Een 401-respons betekent bijvoorbeeld dat de gebruiker geen toestemming heeft om te printen en een 503-code betekent dat de printer offline is of een storing heeft. IPP ondersteunt ook streaming: in HTTP 1.1 gebeurde dat via chunked transfer encoding. Vanaf HTTP/2 wordt de data automatisch opgedeeld in frames, waardoor de bestanden in kleine stukjes naar de printer kunnen worden gestuurd.
Hoe zit het met de adoptie van IPP en Mopria?
Toen Microsoft stopte met de ondersteuning van de oude printerdrivers, waarschuwde het bedrijf dat oude printers mogelijk niet meer zouden werken. Het softwarebedrijf gaf aan dat gebruikers contact met de fabrikant van hun printer moesten opnemen en moesten updaten naar een ondersteunde driver of overstappen op een andere printer.
Tweakers vroeg verschillende fabrikanten of zij problemen hebben ondervonden of verwachten en of zij vragen hebben gekregen van klanten. Van alle fabrikanten reageerde alleen Epson voor publicatie van dit artikel. "Epson is sinds 2014 onderdeel van de Mopria Alliance. De consumenten- en kantoorprinters en -scanners die sindsdien zijn geïntroduceerd, ondersteunen zowel IPP als Mopria", laat een woordvoerder weten. "Voor oudere producten blijft ondersteuning beschikbaar via de Epson-printerdrivers. Tot op heden hebben wij nauwelijks vragen ontvangen over het stopzetten van driverondersteuning door Microsoft Windows. Op basis daarvan verwachten wij niet dat dit voor problemen zal zorgen."
Update, 17.15 uur – Toegevoegd dat CUPS ook de basis is van de printsystemen van BSD-varianten en Apple-besturingssystemen.
Redactie: Imre Himmelbauer • Eindredactie: Monique van den Boomen
:strip_icc():strip_exif()/u/6607/klootviool2.jpg?f=community)
:strip_icc():strip_exif()/u/177567/crop5f8591cadf088_cropped.jpeg?f=community)
:strip_icc():strip_exif()/u/229287/CM.jpg?f=community)
/u/83460/crop5a57ddfc6dc19_cropped.png?f=community)
/u/2008130/crop6536ebba0daf2_cropped.png?f=community)
:strip_icc():strip_exif()/u/338167/Spiralboxes_60x60.jpg?f=community)
:strip_icc():strip_exif()/u/69431/crop5d6d1438b1ba6_cropped.jpeg?f=community)
:strip_icc():strip_exif()/u/654061/crop68a0aef06b226_cropped.jpg?f=community)
:strip_icc():strip_exif()/u/14/wildhagen60x60.jpg?f=community)
:strip_icc():strip_exif()/u/489983/crop5db33928bbeea_cropped.jpeg?f=community)
/u/105978/IMG_0188.png?f=community)
/u/62384/crop61891f444d6e9.png?f=community)
/u/89414/crop601ef6957a87f_cropped.png?f=community)
:strip_icc():strip_exif()/u/188242/anjo%2520bewerkt%25202.jpg?f=community)
:strip_icc():strip_exif()/u/133312/poppetje.jpg?f=community)
:strip_icc():strip_exif()/u/337051/crop55aa209c43fed_cropped.jpeg?f=community)
:strip_icc():strip_exif()/u/232082/crop65420dc95325f_cropped.jpg?f=community)
:strip_exif()/u/301133/crop6737b754ae5aa_cropped.gif?f=community)
:strip_exif()/u/29138/caffeine.gif?f=community)
/u/155344/crop67f3becf42992_cropped.png?f=community)
:strip_icc():strip_exif()/u/447017/tweakersjh_60.jpg?f=community)
:strip_icc():strip_exif()/u/92809/crop577f58c1b8795.jpeg?f=community)
:strip_icc():strip_exif()/u/105381/pidgin2.jpg?f=community)
:strip_icc():strip_exif()/u/99162/crop5fbeb65712858_cropped.jpeg?f=community)