There has been some discussion lately on the FreeDOS mailing list about the 
comparison between the DOS USB drivers made by me (Bret Johnson, 
http://bretjohnson.us), and those made by Georg Potthast 
(http://georgpotthast.de/usb).  The discussion has been around three major 
points, and I would like to comment about those points from my perspective.

1) The licensing arrangements.

The licensing arrangements for my programs are stated pretty clearly on page 6 
(the "Copyrighted Freeware" section) of USBINTRO.DOC.  The license is not 
simply a copy of some other canned license (GPL, Artistic License, etc.), and 
never will be.  Rather than inserting a bunch of legal jargon for lawyers to 
fight over, I simply state my intent.  Read it and see if you still have 
questions.

2) The possibility of placing a "wrapper" around one or both of the drivers so 
that in the end they have the same API, and the user will have a choice as to 
which one they use.

At a very basic level, the two architectures are completely different from each 
other and incompatible.  The difference is so fundamental that it actually goes 
right over most people's heads, and they don't grasp what it really means.  A 
quote from Georg's documentation:

"Using the URB you can only schedule a transaction to a single device specified 
by the device address. So you can send and receive data from a mass storage 
device or send data to a printer. If you have a camera, which sends a constant 
stream of data or a mouse, DosUSB will not be able to retrieve that data while 
it is executing a transaction to e.g. a printer."

In other words, Georg's architecture allows only one thing to happen at a time. 
 For example, under Georg's architecture, it would be impossible to be 
listening to some background music from a USB-attached CR-ROM, playing on a 
USB-attached sound system, while typing on a USB-attached keyboard at the DOS 
command prompt.  It would also be impossible, for example, to be using Arachne 
to access browse the internet across a USB-to-Ethernet converter, while using a 
USB-attached keyboard and a USB-attached mouse to control the Arachne program.  
Of course, all of these things are possible in today's world when you're not 
using USB, and should be possible when you start using USB hardware as well.

Now a quote from my documentation:

"These DOS USB Drivers are specifically designed to be run in the background.  
That is, when you tell the Driver to send some data to a particular Logical 
Device, the Driver essentially says, "OK -- now go do something else and I'll 
let you know when it's done."  The Driver takes care of sending the data 
ENTIRELY in the background, while the computer is busy doing other things in 
the foreground.  As you might imagine, running a process in the background is 
much more complicated (requires more memory) than doing it in the foreground.  
However, the advantages it provides (such as the ability to support mice and 
keyboards) generally makes it worth the extra complexity.  In addition, a 
background process can very easily "simulate" a foreground process in 
situations where that is required, while it is impossible for a foreground 
process to simulate a background process."

The examples stated above are all completely possible under my architecture, 
even though drivers for USB CD-ROMs, sound systems, and USB-to-Ethernet 
converters have not been written yet.  The point is, under Georg's 
architecture, it is impossible to write drivers that could do all of those 
things, and do them AT THE SAME TIME.  It's also impossible under Georg's 
architecture to implement "plug-and-play."

There are also very fundamental differences in the API's.  Georg's API is 
limited to scheduling packets across the USB bus (what he calls a URB, or USB 
Request Block).  My API allows almost complete management of the bus, not 
simply the scheduling of packets.  In fact, it would be possible to build an 
application (even a GUI) that almost completely monitored and controlled the 
USB busses and all the USB devices attached thereto, using only calls to the 
API.  I should point out that I have no intention of writing such an 
application, but somebody else certainly could.

3) The code is "complicated" and hard to understand.

Of course it's complicated.  A host driver is capable of managing dozens of 
devices at the same time, scheduling thousands of USB packets every second, 
managing plug-and-play of the devices, and doing it all in the background 
without any interference to the "normal" stuff you're doing in the foreground.  
How could you possibly expect it to NOT be complicated?

The code is heavily commented, so someone else could understand it if they took 
the time.  The problem is, it's not just the code that's complicated.  It's 
understanding all of the details and nuances and interactions between DOS, USB, 
IRQ's, the BIOS, legacy hardware, etc.  There's way more to it than just trying 
to understand the code.

--
Bret Johnson

The only things you get to keep forever are the ones you give away.


------------------------------------------------------------------------------
_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to