Reviving old scanners with an in-browser Linux VM bridged to WebUSB over USB/IP
yes-we-scan.app107 points by gmac 3 days ago
107 points by gmac 3 days ago
It's a great concept, but you haven't open-sourced the previous code, as the license requires, and you're yet again apologizing in this project as well, without any code.
Pretty sure you have my code in both projects. I contribute first and foremost to make printers and scanners to work reliably, but also keeping in mind the idea that I could at least try to apply legal actions for companies which violate the license rules one day, as a CUPS/SANE/printer/scanner drivers contributor.
Printer companies generally don't like that: https://xcancel.com/ValdikSS/status/1745898408693371125#m
Cool project though! Hope you can publish the source one day so we can all benefit from it in the future!
If you think I’ve done something wrong according to the licences involved here, please do clarify. I had understood that open-sourcing the Linux stuff (as branches of a fork of v86, linked from the /credits page) met all relevant legal obligations, which I absolutely intend to do.
More broadly, it’s unusual for me not to make everything open, and I do feel bad/conflicted about it. But, unusually, I feel like I have identified a possible route to monetising this, and I think open-sourcing all of it risks making that harder.
Sorry, it's me who needs a reading comprehension lessons. I've read back in printervention website and now again that you didn't open the code that you HAVE to. Because you're apologizing for that, I assumed that you're breaking the license, twice.
After rereading both of your websites again, I should say you've nothing wrong! It's sleepy me who accused you for nothing, sorry.
Linux printing and scanning stack is held on 5 enthusiasts basically, and is quite buggy. Any contributions welcome.
If you want to further improve your project, make it small and fast, you can compile printer filters (most of which work on cups-raster data) with emscripten. This way you don't need to use CUPS, Linux, and x86 emulation. You'll need to write some shims for CUPS libppd functions which many filters use (some don't), and either parse PPD files or convert them into another representation.
Most filters (drivers) are quite simple pipes from stdin to stdout, sometimes they don't use cups functions at all, receiving all the data directly from raster header. Some filters, such as gutenprint, are more complex and use their own backends, but even in this case it's not a hard task: libusb has emscripten WebUSB backend.
OT: But in a way kind of good to know.
Ages ago I got a Canon A3 printer. I've never been sure if it worked properly, as I was never sure if the colours are right.
Next time I unpack it I'll have to try and find the place the 5 enthusiasts hang out - the cups mailing list ?
If monetization is at odds with open-source, why wouldn't potential customers just wouldn't go to VueScan, as someone posted? I was recently looking at scanners, and saw some brands directly advertise Linux support through this... which means you now have to pay subscription each year to access the expensive hardware you bought.
Thankfully the Avision FB5100 states native Linux support (AFAIK, this is the only flatbed A3 scanner that does), so I'm certainly going to buy this one. I know implementing device support for companies that don't make any effort is hard and thankless, but then we need to divest/invest in the right companies and solutions.
Any airprint/mopria certified devices don't need drivers to work on Linux, Windows, Android or macOS.
My recent experience shows that eSCL is way behind in terms of functionality. If I want lossless scanning from by Brother scanner, I need the proprietary drivers.
My monetization idea doesn't involve charging users, and it's more on the printing side (but most of the source is shared with scanning).
If you just install CUPS in a virtual machine (emulated in wasm on the web) what patches do you need to share?
The same you have to share if you don't use a virtual machine, this isn't hard.
Overengineering aside (which is pretty legitimate way of doing hobby tech), why not build SANE on WASM? And maybe interfacing with airplay scanners could be even easier?
FYI, if the goal is just to use something like an old Canon LiDE scanner (pretty common/cheap devices with no more driver support) on macOS: SANE runs natively and works great: https://formulae.brew.sh/formula/sane-backends (comes with `scanimage` CLI tool).
That is super helpful (I may well use it myself). But I guess a web app probably reaches some non-technical users that CLI tools don't.
Sane works out of the box on Linux (at least in my limited experience). There are front ends for Windows and MacOS [1]. No need for a browser in the loop. The browser is becoming more and more Emacs... An operating system that happens to be a browser.
With AirSane [1], you can make scanners integrate nicely with macOS. This page [2] has a writeup (in German) how to set it up on a RaspberryPi. On non-macOS devices you can still use the web interface, as demonstrated by the "yes-we-scan" app.
Hrm, yes-we-scan and printervention are built on SANE and CUPS respectively, which makes sense. But running them in a whole wasm-emulated Linux kernel and userland seems... like a lot.
Oh, and:
> I must apologise that I haven’t so far open-sourced any part of this that I don’t have to.
With some blather about commercial opportunities. Which is a weird thing to say without linking to the bits that must be shared (under the terms of the various licenses).
There’s separately a /credits page where I’ve done that, linked from the footer. Perhaps I should link it from the apology too. Tell me if you think I’ve not shared what I have to.
If you just need a single scan every now and then and have an old scanner, I can see this being handy. Installing Linux, battling Windows drivers or buying Vuescan (great as it is) might be enough to make most just give up and take a photo of whatever document they where going to scan.
It is a little much, but if it can be made to "Just Work" by booting a Linux kernel in the browser that it pretty cool and impressive. I'm still a little on the fence about my browser having USB support, but this could be handy for dusins of people.
Ah, it seems like the architecture was designed by a slop machine. OK.
RE'ing drivers and porting them is one of those things that AI turns out to be really useful for, and there have been a few of such projects posted here already. But of course the author has to drive it in that direction rather than let it just glue stuff together.
If they reverse engineered the drivers then why do they need a virtual cpu and a Linux kernel to run them. Is this reverse engineering or just installing software in a weird environment?
Speaking of not just gluing stuff together with usb/ip could one make a virtual WebUSB host kernel module that could be used by the Linux kernel USB stack? They most likely would not want to do that because then all of the code would be GPL and would have to be shared with the public.
I don't think a usb host driver is necessarily tainted into being GPL? But if it is, plenty of non-gpl oses that can run SANE.
I used a raspberry pi 3b+ and an ancient ipad to turn my Canon A3 scanner into a network scanner with an LCD interface (which also just points to the phpscan web page). I tuned to html / js / css to fit the ipad perfectly and only show options that worked with my specific scanner.
Such a cool project. I love seeing what the web platform can do and particularly like the hardware integration capabilities of these type of APIs. I remember playing with a Web USB ADS-B scanner that plugs into your SDR.
Interestingly, it was better executed than many of the downloadable native apps.
The idea of emulating a lightweight Alpine Linux in the browser to make this work, without overengineering don't-know-what custom niche solution is definitely intriguing.
I wonder how much work would it be to port a given Linux USB driver to WASM alone?
I could also just go buy VueScan, which is cross platform and great.
Reminds me of building a tiny Linux VM to access the APFS share of our Mac-centric uni from Windows. Other students just got a MacBook..
I don't want this enough to subject myself to WebUSB, but I am particularly fond of a no-longer-supported flatbed scanner I own which powers entirely off the USB port. It was super handy if you wanted to scan to like a tablet in a car or something, as long as you had a USB-A port to work with.
I've plugged in many a scanner (or printer) into my Linux machines, and they always just werk. Which this project probably makes use of: SANE. I think there's even a project porting SANE to Windows (because that's I guess what this is aimed at: scanners that never got a WHQL driver).
Can this be made into a generic support app for old devices, not just scanners?
[flagged]