Printing Trends in Linux (O'ReillyNet)
Printing Trends in Linux (O'ReillyNet)
Posted Sep 20, 2007 21:43 UTC (Thu) by jwb (guest, #15467)In reply to: Printing Trends in Linux (O'ReillyNet) by danielhedblom
Parent article: Printing Trends in Linux (O'ReillyNet)
I've been arguing for years that the distributor is the key element that makes Linux as good as it is. Without the editorial function of the Debian, Red Hat, or Ubuntu developers, Linux is just a pile of code. If you try to cut the distribution out of the picture by making "distribution-independent" software, then you are cutting out the most valuable part of the Linux ecosystem.
I don't want "distribution-independent" software. I want software that works well with my distribution. This can't be that big of a burden, considering that my distribution has more than 60,000 packages available. Furthermore my distribution supports thousands of printers without binary blobs and without junk collecting in /opt.
I think we saw recently the kind of quality you can expect from vendor-supplied print software on Linux. Samsung or one of the other vendors shipped a software package which set everything in /usr/bin to be setuid root. That's Kwality(TM)!
Posted Sep 22, 2007 18:06 UTC (Sat)
by rlk (guest, #47505)
[Link] (3 responses)
As the Gutenprint project lead -- and Gutenprint is about as pure a FOSS project as there is -- we've had to support three different driver frameworks over the years: traditional monolithic Ghostscript (the "stp" driver, which we did eventually manage to deprecate -- thankfully!), CUPS, and IJS-based Ghostscript with Foomatic on top of it. Even if we just look at CUPS and IJS/Foomatic, that meant a lot of duplicate work, since the API's are completely different. The only code that's shared between the two is the core driver package itself. So we have to fix bugs in both, come up with different workarounds for things like borderless vs. non-borderless printing (don't -- I repeat, do NOT -- get me started on that!), and every time we make changes, duplicate the testing. And by the way, the user interface to the two drivers isn't identical in the treatment of certain options.
As if that weren't enough, at least one major distribution used its own print tool for a number of years, and we received a lot of support requests for "I can't see the driver for my printer!". The only advice we could really give was to install it from source and use the CUPS web interface (http://localhost:631), which nobody wanted to do because their distribution told them to do it differently. Since I didn't use that distribution, and nobody else came along to package for it, we wound up with a lot of unhappy users.
Then we found another distribution effectively disabled the CUPS web interface on the grounds of security (which the CUPS folks disagreed with, but that's another story). Of course, that distribution (like most others) didn't install the CUPS development package by default, so compiling Gutenprint from source didn't yield usable drivers, making it even harder to tell people what to do. The upshot of it all is that there's no one set of installation and configuration instructions that works everywhere, and that's not a good thing.
Vendors keep coming out with new printer models, so we have to keep adding support for new printers, and none of that follows distribution release cycles (and it would hardly be reasonable to ask Epson to follow the release cycle for Fedora, OpenSUSE, Ubuntu, Debian, and so forth -- not to mention that the distributions themselves aren't on the same cycle, and there's no reason they should be). Not to mention that people don't want to have to upgrade their distribution just because they've bought the latest printer on sale. But what it does mean is that there has to be a reasonably straightforward way to install new printer drivers on top of an existing distribution. And that way does have to be reasonably distribution-independent. We can't keep track of every release of every distribution out there. Note that this has nothing to do with proprietary vs. free source.
For many years, Debian handled it by uploading new releases of Gimp-Print and Gutenprint on a regular basis, thanks to the unstinting efforts of one particularly dedicated individual (Roger Leigh). But unless every distribution is willing to devote someone to every driver project (which also has a scalability problem), that method won't work too well either.
Posted Sep 27, 2007 19:36 UTC (Thu)
by nim-nim (subscriber, #34454)
[Link] (2 responses)
So you've contributed to three different frameworks equally, making none obviously better feature-wise than the others, and you wonder distributions didn't know which one to distribute?
> So we have to fix bugs in both, come up with different workarounds for
And time is wasted there, which you try to make up for by short-circuiting distribution release cycles
> Vendors keep coming out with new printer models, so we have to keep
Not a problem - every distribution does in-cycle updates provided your code release process is reliable and frequent enough shipping an update in-cycle is possible in the first place
> But what it does mean is that there has to be a reasonably
No, that means printer manufacturers must work together on a single common driver codebase with frequent stable releases distributions can easily package both before a distribution release and later as a in-cycle update.
You're reinventing the third party binary drivers hell major distributions have spent major efforts weaning hardware manufacturers of, and you don't even have the constraints that make kernel updating difficult.
Stop trying to do distribution and integration work in the distribution stead, focus on providing distributions what they want (a reliable code source), and your problems will just vanish. You've got enough problems on the code side without getting in the binary distribution business too.
Speaking has someone who packaged distribution material for years, you're a victim of the common "distributions hate me" developer syndrome, where a bad source code release policy results in delays in the distribution-side propagation of your stuff, and instead of trying to understand why distributions can not work with your code releases, you try to short-circuit them and design custom binary payload distribution circuits instead. These attempts almost always fail miserably, because users have other things to do than learn a gazillon different installation methods, and anyway without the distribution integration QA level the result is a windows-like mess. But in the meanwhile all the useless stuff you've added to enable direct binary distribution makes your source even less easy to build cleanly for distributors, and you've wasted everyone's time.
The working strategy is:
1. agree with all the driver providers on a single driver code project, so you can make it obviously better than the others and have distributions focus on it
2. have a fast release schedule so there's always a fresh & stable driver code collection for distributions to package when they hit release time.
3. always release solid code so distributions know they can rebuild new versions in-cycle as updates without fearing it will go bang on user systems
4. Listen to distribution feedback, make the packagers trust you to fix stuff quickly when one of your releases have a problem
Posted Sep 28, 2007 1:03 UTC (Fri)
by rlk (guest, #47505)
[Link] (1 responses)
>> different distributors take different approaches and basically supply different driver API's
> So you've contributed to three different frameworks equally, making none obviously better feature-wise than the others, and you wonder distributions didn't know which one to distribute?
More accurately, we (Gutenprint) have *supported* three different frameworks (different API's) -- basically, competing standards for drivers. Otherwise we'd be limiting who could use Gutenprint. Distributors pick their preferred driver framework; we don't get to make that decision for them.
>> So we have to fix bugs in both, come up with different workarounds for things like borderless vs. non-borderless printing (don't -- I repeat, do NOT -- get me started on that!), and every time we make changes, duplicate the testing.
> And time is wasted there, which you try to make up for by short-circuiting distribution release cycles
No, we just have to make sure that Gutenprint works with both of the currently-supported driver frameworks (CUPS raster and Ghostscript/IJS/Foomatic). People get really unhappy if we don't do our testing and we break their printer.
>> But what it does mean is that there has to be a reasonably straightforward way to install new printer drivers on top of an existing distribution.
> No, that means printer manufacturers must work together on a single common driver codebase with frequent stable releases distributions can easily package both before a distribution release and later as a in-cycle update.
Good luck getting that to happen. The only major cross-vendor driver package for inkjets *is* Gutenprint. The individual vendors at best release drivers for their own printers (open source in the case of HP, partially proprietary in the case of Epson, and not at all in the case of Canon).
> You're reinventing the third party binary drivers hell major distributions have spent major efforts weaning hardware manufacturers of, and you don't even have the constraints that make kernel updating difficult.
> Stop trying to do distribution and integration work in the distribution stead, focus on providing distributions what they want (a reliable code source), and your problems will just vanish. You've got enough problems on the code side without getting in the binary distribution business too.
Come again? The only binaries we distribute are for OS X, which is a special case. We do not distribute binaries for anything else. For that matter, we kicked all of the distribution-specific packaging (Debian control files, RPM .spec files) out of our source base before 5.0; we decided that either we had to support every distribution (which is of course hopeless) or just distribute source. We went the pure source route and let distributors and end users compile it.
> Speaking has someone who packaged distribution material for years, you're a victim of the common "distributions hate me" developer syndrome, where a bad source code release policy results in delays in the distribution-side propagation of your stuff, and instead of trying to understand why distributions can not work with your code releases, you try to short-circuit them and design custom binary payload distribution circuits instead. These attempts almost always fail miserably, because users have other things to do than learn a gazillon different installation methods, and anyway without the distribution integration QA level the result is a windows-like mess. But in the meanwhile all the useless stuff you've added to enable direct binary distribution makes your source even less easy to build cleanly for distributors, and you've wasted everyone's time.
I think this is the exact reverse of the true situation -- it's certainly the opposite of what I think I'm frustrated about.
The problem we've had (again, as Gutenprint lead) is that each distribution comes up with its own administration tools for printing, and uses a different database to store information about printing. Gutenprint can generate CUPS PPD files and Foomatic XML data, but that isn't always how distributors package their printing data, so if an end user wants to try our latest code drop, they don't manage to integrate it and complain (with merit) about the situation.
It isn't as bad as it was maybe 3 years ago, but even now SUSE expects you to use YAST to configure printers (and doesn't support http://localhost:631 out of the box), Fedora has its own tool, and I have no idea what other distributions do. So it doesn't matter, source or binary, users aren't able to pick up our latest driver package and "just use" it.
> The working strategy is:
> 1. agree with all the driver providers on a single driver code project, so you can make it obviously better than the others and have distributions focus on it
That just isn't going to happen: there are too many printers out there for any one volunteer project to support all of them. In any case, there are standards for drivers -- CUPS raster and IJS with Foomatic data -- that work. I'd rather see all the distributors switch to CUPS and use CUPS PPD files as their database, and support the web interface to CUPS as their primary administrative interface, but that doesn't seem to have completely happened.
> 2. have a fast release schedule so there's always a fresh & stable driver code collection for distributions to package when they hit release time.
We release when we have enough changes to usefully do so. However, there's a somewhat delicate tension between "fast release" and "stable", and sometimes we have to distribute beta quality drivers for new printers to let them stabilize.
> 3. always release solid code so distributions know they can rebuild new versions in-cycle as updates without fearing it will go bang on user systems
See above about testing. We try very, very hard to avoid incompatible changes during stable release trains (4.2 and 5.0). I'm very proud of what we did with 4.2. I also think 5.0 is a very good release. Unfortunately, we did have to make an incompatible change (related to margins) in 5.0.1. Even more unfortunately, we could only do it for the native CUPS driver; there was no way to do it with Foomatic.
> 4. Listen to distribution feedback, make the packagers trust you to fix stuff quickly when one of your releases have a problem
We listen to distribution feedback when we receive it. However, sometimes we don't receive it, and distributors try to fix things on their own without discussing them with us first. Two big examples that come to mind are one distribution (one of the more solid ones, in fact) that started using 4.3 (development) releases despite warnings that they should stick with 4.2 (stable) releases, and a distribution that tried to work around the paper margin issue in 5.0.0 via a really ugly hack. If the distributors don't discuss things with us ahead of time -- and some do, but some don't -- it's very hard for us to see what's going on.
Posted Sep 28, 2007 8:29 UTC (Fri)
by nim-nim (subscriber, #34454)
[Link]
Not at all, since you've implied commonality of interests and alignment of reflexion with the OpenPrinting guys I've answered you as to speaker for the "printer driver" community
>> No, that means printer manufacturers must work together on a single
> Good luck getting that to happen.
The OpenPrinting things does not go in the right direction indeed
> The only major cross-vendor driver
Nevertheless that's the only working solution and instead of telling the OpenPrinting people "I understand you, I agree on the need to be able to short-circuit distros to distribute drivers" you should tell them "work with me on a common project and your stuff will be distributed by the normal distribution channels".
> We went the pure source route and let distributors and end users compile
So why do you feel what's right for you is not right for the OpenPrinting people?
> The problem we've had (again, as Gutenprint lead) is that each
That's because printing administration tools writers didn't come with a solution that satisfies distribution needs, so distributions had to serve themselves. From the printer community side all you can do is create the greatest admin tools distros can't ignore or help your users report problems on distro admin tools so the distributions fix their stuff faster.
> and uses a different database to store information about printing.
And that's the direct fault of the printer driver community for not agreeing on a single database in the first place. Don't blame distributions for making different choices, blame yourself for giving them this choice.
The printer driver community did agree to align its efforts on a single spooler, Cups, and distributions magically all converged on Cups.
> Gutenprint can generate CUPS PPD files and Foomatic XML data
Which is a mistake if you want distributions to choose one of them only
>> 1. agree with all the driver providers on a single driver code project,
If there's no driver it can't be distributed as a binary. If there is a binary it can be distributed as source.
>> 2. have a fast release schedule so there's always a fresh & stable driver
> We release when we have enough changes to usefully do so. However, there's
So just release the beta part in a separate archive, so distros can easily strip it when they need to do a in-cycle update and have no time for QA on the beta part.
>> 4. Listen to distribution feedback, make the packagers trust you to fix >>stuff quickly when one of your releases have a problem
The people in charge of kernel drivers for major distributions have acknowledged they've been guilty of not working with upstreams in the past, and I doubt their printer people feel any different. So this is something for the distributions to fix. However it is easier for distributions to follow a single kernel code source than the numerous competing printing stuff projects out there, so it will be fixed faster if the printer people worked together in the first place.
> Two big examples that come to mind are one distribution (one of the more
Means your release cycle is too long, and this distribution felt it could not wait for the next stable point.
> and a distribution that tried to work around the paper margin issue in
Means the distribution
1. is an issue of trust and trust is damn hard to earn unfortunately, 2. is something major distributions are working on but is easier when they have a single organized entity (like xorg or lkml) to talk to.
> If the distributors don't discuss things with us ahead of time -- and some
While discussing is good, having a clear coherent printing roadmap distros can work on without needing to discuss is better.
Printing has always been a problem, in no small part because different distributors take different approaches and basically supply different driver API's. Some distributors use Foomatic, some use CUPS native drivers with their own tools layered on top of it, and some have at least historically used their own databases. This makes life a real pain for driver writers, both proprietary and FOSS. Hopefully we can at least standardize this so that those of us in the driver community don't have to duplicate work.Printing Trends in Linux (O'ReillyNet)
> different distributors take different approaches and basically supplyPrinting Trends in Linux (O'ReillyNet)
> different driver API's
...
> we've had to support three different driver frameworks over the year
> things like borderless vs. non-borderless printing (don't -- I repeat, do
> NOT -- get me started on that!), and every time we make changes,
> duplicate the testing.
> adding support for new printers, and none of that follows distribution
> release cycles
> straightforward way to install new printer drivers on top of an existing
> distribution.
I think there's a bit of confusion here between Gutenprint (for which I'm project lead) and OpenPrinting (which I participate in in my role as Gutenprint project lead). I'm speaking for Gutenprint here.Printing Trends in Linux (O'ReillyNet)
>...
>> we've had to support three different driver frameworks over the year
> I think there's a bit of confusion here between Gutenprint (for which I'mPrinting Trends in Linux (O'ReillyNet)
> project lead) and OpenPrinting (which I participate in in my role as
> Gutenprint project lead).
>>common driver codebase with frequent stable releases distributions can >>easily package both before a distribution release and later as a in-cycle
>>update.
> package for inkjets *is* Gutenprint. The individual vendors at best
> release drivers for their own printers (open source in the case of HP,
> partially proprietary in the case of Epson, and not at all in the case of
> Canon).
> it.
> distribution comes up with its own administration tools for printing,
>> so you can make it obviously better than the others and have
>> distributions focus on it
> That just isn't going to happen: there are too many printers out there for
> any one volunteer project to support all of them.
>> code collection for distributions to package when they hit release time.
> a somewhat delicate tension between "fast release" and "stable", and
> sometimes we have to distribute beta quality drivers for new printers to
> let them stabilize.
> We listen to distribution feedback when we receive it. However, sometimes
> we don't receive it, and distributors try to fix things on their own
> without discussing them with us first.
> solid ones, in fact) that started using 4.3 (development) releases despite
> warnings that they should stick with 4.2 (stable) releases,
> 5.0.0 via a really ugly hack.
1. didn't trust you to fix it in time or
2. fell to the same shortcut logic I'm blaming OpenPrinting for adopting, but you think is just fine
> do, but some don't -- it's very hard for us to see what's going on.
