There is no easy way to avoid buying a Winprinter because there are $300 inkjet and laser Winprinters out there; they're not just restricted to cheap Lexmark printers. Unlike Winmodems, Winprinters come in both parallel port and USB varieties, with the latter being more common nowadays. One can consult Mandrake's extensive hardware list at www.linux-mandrake.com for clues on the correct printer to buy for your non-Windows box.
How Winprinters work
Winprinter manufacturers base their Winprinter design around Microsoft's GDI drawing system. Normally this would be a Good Thing - after all, What You See is What You Get would be a perfectly logical choice for a printer, if it weren't for one thing:Winprinters do not use GDI as a control language
A Winprinter works by intercepting GDI calls and wastes CPU cycles by translating the GDI call into its own, proprietary
bitmap interface. This in itself is not the major stumbling block to getting a Winprinter to work with Linux - one could reverse engineer this with a non-trivial amount of effort - but there are a couple of other things:
- Microsoft's GDI is closed-source. Because GDI lurks beneath the Windows surface, this hinders development of a Linprinter, and the vendors' unwillingness to provide any sort of specification on how their printer works certainly doesn't help things any. Of course, the fact that these printers are usually cheaply constructed brings us to our next point
- The Winprinter has a pathetic hardware buffer and requires very strict timing control. On a normal printer, the buffer can hold half a page or more. On a Winprinter, the buffer usually holds up to two lines. Because of this, the printer driver must supply data at the specific rate that a Winprinter requires. /dev/lp assumes that the printer is smart enough to wait until the printer's buffer is full; Winprinters have problems with this. Since there is no standard for emulated printers, timing varies wildly from one Winprinter to the next. This is where Winprinter manufacturers save dollars; less circuitry = lower price!
- Writing a Linprinter driver is a non-trivial taskThis would require intimate knowledge of how the printer in question works, and referring to point #1 above, the Winprinter manufacturers certainly don't want to cooperate on how their Winprinter works. There are isolated cases of Linprinter drivers being written - however, these are written to "scratch an itch" so to speak. Again, one model of Winprinter may work very differently from another model of Winprinter - even from the same manufacturer!
As the shameful owner of a Lexmark Z12, I can attest to how bad these printers are. Printing out a printer test page from Windows reveals just how bad mine is; the driver list takes up about 3/4ths of the page. Avoid these printers like rotten cheese; they fall into the same hardware category as AMR slots, Packard Bell and Compaq desktop computers, proprietary USB Internet keyboards, and Winmodems.