I picked up a Brother HL 1440 from a friend for relatively cheap: \$40 for the printer, pagecount about 6400 with a new drum 50% ago. I knew it was going to be a struggle; it wasn't terrible, but there's a lot of stuff that's not really documented very well.
First of all, my router (spacek) runs FreeBSD, and since it's almost always on (if any other computer is on, it's likely to be for internets), plus I wasn't keen on depending on Linda's PC any more, so I attached it to the router with the USB cable I stole from Linda's inkjet.
Then I read the FreeBSD printing handbook. It basically says "USB is nice, don't use it. Get a parallel printer instead." Well, my 1440 has both parallel and USB, but we lack a parallel cable, so USB it was. I figured I'd be in for it anyway, so I built CUPS. I'd done some googling, and discovered I'd likely be best off at this point setting up my devfs entries:
spacek# cat /etc/devfs.rules
[system=10]
add path 'unlpt*' mode 0660 group cups
add path 'ulpt*' mode 0660 group cups
spacek#
Getting the PPD was easy: I skipped on over to linuxprinting.org and sucked it down to my Mac (reaper).
After faffing about a bit in /usr/local/etc/cups/cupsd.conf, I finally just changed every instance of "Allow localhost" to "Allow all". Horrible security, but at least it let me configure the printers without hassle. ("Allow reaper" didn't seem to work, nor did using the IP.) I was OK, because I had
Listen localhost:631
Listen spacek:631
but those went away later, and turned into "Listen 631" and now it's listening on every interface - I will have to fix that later, along with the Allow lines.
I added the printer, calling it "brother", using the https admin page, giving it the device "USB Printer #1 (no reset)", and fed it the PPD I'd previously downloaded when it asked.
Test page came out ok, so I told CUPS to "Share published printers connected to this system" (that's when it blew away my Listen entries) and googled for "windows ipp". The first hit gave me the hint - set up a class. I did that, called it Windows, and then downloaded the Brother HL 1440 drivers from brother.com. I had to install the Printing System, so I tried it on Linda's Windows PC first. (Hey, I just rebuilt mine!) Piece of cake.
reaper picked up on the shared printer too, as soon as I told it to go look. That was less than successful - printing off one of my blawg entries cut off the top little bit. I'm not sure what's going on, maybe a PPD issue.
During the initial setup, I'd been getting "foomatic-rip failed" error messages when I tried to print anything. I fixed that by installing the print/foomatic-filters port and restarting CUPS.
I'd made some changes to my smb.conf (I run Samba on spacek to share my home directory to my Windows PC), but it turns out those weren't necessary. I may try adding Samba support anyway, just because I'm like that.
So in summary:
1 USB printers work ok in FreeBSD, but you'll want to change/create /etc/defvs.rules (I have a FreeBSD 6.1 box, YMMV for older distributions).
2 Chances are good that you'll want the print/cups and print/foomatic-filter ports installed. I also did print/a2ps-letter for good measure, as the foomatic port said it might want it.
3 You'll likely need to create a class for a Windows machine to pick up on the IPP printer. I had already created the http://spacek/class/Windows port while trying to do things by hand, then the Brother Printing System stuff found it at installtime - will likely try creating the port first by hand when I go to install the printer on my own Windows machine.
4 Mac printing was less than wildly successful.
5 Following the above directions will result in a less-than-secure CUPS installation, although that's easily rectified.
I'll post further once I've got things a bit more refined.
Update (12 January 2007): It looks like you first have to trick Windows by starting to add a network printer; tell it the address is http://cups.server:631/classes/classname, then cancel out. During the installation of the Brother software, it will ask what kind of printer, tell it that it's a "Network Shared Printer" - it will bring up a "Browse for Printer" dialogue box. Cancel that, then it will ask what port to use. Then you can select the http port and away you go.