This week’s Soapbox is a little different. At Maker Faire I got a chance to meet a lot of people that I’ve only known via mailing lists or their work; one of them was Paul Stoffregen from PJRC. He’s the designer and developer behind the Teensy, one of my favorite USB-based microcontroller development systems. While chatting with Paul he mentioned there’s something pretty big Microsoft could do for the maker community, especially now, as Microsoft is working on Windows 8. It’s a little insider-baseball, but anyone who has tried to install drivers on Windows 7 will know it’s not easy, more so if you’re doing something with USB or microcontrollers. It involves CDC. What’s CDC? CDC stands for “Communication Device Class” — it’s one of the default built-in USB interfaces provided by USB host drivers sitting on a computer. The fact that CDC is standardized means that you can plug any CDC devices into your Mac/Windows/Linux computer and they’ll know what to do. With Mac/Linux, they don’t even need a driver at all. For Windows, you don’t need a formal driver program but you do need an “INF” file — this is a little text description giving Windows a hint about the name and ID# of the CDC device you want to plug in. The CDC spec actually defines many types of communication devices. This conversation is specific to CDC’s “Abstract Control Model.”
The reason this is so important is that nearly all hobby microcontrollers with USB use the CDC standard to send serial data back and forth, and it allows microcontrollers to be backwards compatible — just like the Arduino Uno looks pretty much the same to a computer as the Duemilanove. Same with the new Leonardo.
The following is an overview from Paul, with notes from myself. Please post in the comments if you want to add more. And if you’re at Microsoft (there are tons of makers there!), please help us find the person who can make this happen.
The goal of this conversation is a high-quality user experience on Windows with CDC installation. For that to happen, someone within Microsoft, with the authority to add an INF which matches the USB class/subclass/protocol or a Microsoft-defined OS Descriptor, needs to understand this new developing trend towards CDC devices.
Recently the “Maker Community” has experienced tremendous growth. Driven by the culture of innovation and sharing, it has become an ecosystem that is giving rise to numerous independent hardware vendors (IHVs).
Windows currently has a poor initial user experience when installing these new hardware products. The vast majority are based on the USB Communications Class Abstract Control Model. Windows provides an “inbox” driver, but each IHV must provide an INF file to associate the driver with specific vendor and product IDs. Loading the INF file is an extra step with poor usability. By contrast, Mac OS X and Linux offer seamless installation, because those systems automatically load their drivers based on standard USB class/subclass/protocol ID numbers.
On Windows 8 Customer Preview, the typical user experience is even worse, due to new INF signature requirements.
There are two possible solutions:
- Windows could provide an INF to automatically load its inbox driver. The “Compatible ID” is “USB\Class_02&SubClass_02&Prot_01″. This is the approach used by OS X and Linux.
- Microsoft could define an “OS Descriptor” for devices wishing to seamlessly associate with the inbox driver. OS Descriptors are documented here.
The specification from that page states in Appendix 1, “Microsoft reserves all other compatible and subcompatible ID values for future use. If you need an ID that is not on the current list, do not create one without prior approval from Microsoft.”
I would love to see Windows users gain the same seamless installation experience currently enjoyed on Mac OS X and Linux when using these devices. I would be happy to assist with either approach. I can answer questions, provide INF files, provide actual hardware devices, and/or assist with testing. Please contact me by email, email@example.com, if I can be of any assistance.
— Paul Stoffregen
Unfortunately, there is a decade of not supporting driverless CDC in Windows. I’m sure there are reasons behind this, but the way that Mac and Linux handle CDC natively similar to HID is pretty nice. I asked a few people who are tinkering with the Windows 8 Release Preview to see what’s changed. Here’s one example of how the drivers are still handled: “Nvidia didn’t have drivers for my display, but I was able to reboot in ‘disable driver signing’ mode and install unsigned drivers instead. And when I re-rebooted, they stuck: Windows 8 appeared to actually be more lenient about driver signing than Windows 7 was, curiously enough.” So it’s a little better, but for makers doing work with microcontrollers, Mac and Linux are a better experience. If the maker movement was small, I would say it’s not in Microsoft’s best interest, but I can personally say having makers use your products can change an entire company. Just look at the Kinect — hackers and makers completely changed how Microsoft is selling and using one of their most important products. I’ve read that the new versions of Windows may not allow other operating system to run on the same hardware as Window 8 unless it’s a Microsoft OS. If that happens we’ll see more and more of an exodus to Linux and Macs. This CDC driver issue is another reason to consider a move as well. I’m hoping this gets the attention of the makers at Microsoft who want to embrace the engineering and hobbyist communities.
Here’s where we could use everyone’s help. Post in the comments to show you’re interested in this change in Windows 8, and if you’re at Microsoft, help us talk to the person and group who could make this happen. Windows 7 provides a poor user experience, especially when compared to Mac and Linux automatic installation. Windows 8 is even worse when the INF is unsigned, requiring a special reboot to allow the INF installation, even though it only associates with an inbox driver. It’s not too late — Windows 8 isn’t shipping. Thanks!