Just bringing a set of comments up to the main blog...
There's an interesting discussion going on against the "Is Linux Fat" post, someone (no-name) posted the following...
Microsoft solutions empower Microsoft. Opensource solutions empower the developer.
That got me thinking about the difference between an O/S developer and an application developer - as an desktop/embedded application developer I want to develop an application or service that runs on my PC/Device and in some way adds value to the PC/Device, whether this is the UI for an ATM machine, or the UI on a multi-lingual Travel Kiosk, or a real-time command and control application in a robotics system doesn't much matter.
Surely the point is that an application developer cares about having great tools, great documentation, code samples that show how to call the API's, a working debugger, and bells/whistles like intellisense, or the Whole Tomato plug-in for eMbedded Visual C++ or Visual Studio .NET 2003, right ?
I want to be abstracted from the underlying O/S and hardware as much as possible (which is why managed application development in C# or VB.NET is really, really cool). Here's an example.
I want to send 5 bytes of data out of the serial port, I call the following API's...
When writing and testing this code I don't need to know or understand how the underlying hardware or device driver is implemented, is this a UART or FPGA, who knows... (who cares!).
Developers for the most part are divided into O/S developers, and application developers, the O/S guys are responsible for getting the o/s running on hardware, this is where bootloaders, device drivers, and access to O/S source is useful. Application developers on the other hand should be adding value to the finished device by writing a shell, or user mode application.