Choosing an Embedded OS for Sustainability? 68
vivekb asks: "I work for a small start-up that's building its first commercial product. Because cost is less of an issue than development time, we've decided to make the brains out of an ETX computer with some sort of (non-realtime) operating system. Based on initial costs of tools and estimated license fees, the cheapest OS's I've found are Windows CE and several offerings of Linux. The big question that I can't answer is, 'How much will these platforms cost in sustaining activities?' In three years, when we're fixing bugs or applying patches, how much will we be paying vendors and how much will we be spending on internal developers? When the Linux kernel is at version 3.0 and our device is still running 2.6 -- or when CE reaches .INFO and we're still at .NET -- will support even be available? If anyone has past experience picking an embedded OS for a screen-and-button based electronic device, what did you learn to stick with or avoid?"
Hmm.. (Score:3, Insightful)
Tsume
Linux for Longevity. (Score:3, Insightful)
Keep in mind, that if code security is an issue, Linux may not be an answer since any kernel changes has to be available for public use. If no kernel changes have to be made for your app however, I don't think it would be a problem however IANAL. Other people here could answer this question a lot better than I could.
Device Drivers (Score:4, Insightful)
I would pick the OS based on whichever has the best device driver support for everything in your product. Device driver development can chew up a lot of time. You would be better off spending resource time on the application layer of the product.
Source code (Score:3, Insightful)
So of the two you've listed, clearly Linux would be your choice. Plus, don't forget that Microsoft's embedded OSes reinvent themselves every few years - just wait until they throw out CE and sell you Vista Embedded next year.
There are other choices based on the size/scale of your project - such as Nucleus, which gives you source access.
Figure out your requirements first (Score:5, Insightful)
Are there realtime requirements? Do you know what hardware will be used, or will you need to support different kinds of displays, for example? What are the reliability requirements -- will this be used in life-critical applications, or will it be used for games? Will you want to upgrade to the latest version of the OS from time to time, or will you pick a good one and make zillions of copies of your product based on that one version? I'm sure there are other questions you should be asking yourself (help me, fellow Slashdotters).
Figure out your requirements first, then figure out how to meet those requirements. Don't just pick a solution and then try to make it fit.
Not a problem which should be solved (Score:2, Insightful)
You will NEVER want to destabilize your product and have significant retesting by upgrading the Kernel or OS. Why? What new features in the OS matter to your customers? After all the OS is not your product and the customer should not care. Keep in mind that the OS vendors will be trying to get you to distribute upgrades, but resist the temptation. You will be spending money for no reason.
When you need to develop phase II of the product, its a different ball-game. Then you can use a new version of the OS, or a different OS. The point is, you are not "upgrading" your kernel, you are developing an evolution of your product on a new OS. Different mindset.
Re:Not a problem which should be solved (Score:2, Insightful)
If your embedded OS goes into a home appliance or some stand-alone application, your experience holds fast. If the application is net connected and world-visible, i.e. the controller in an internet-enabled vending machine, then your experience and opinion is lacking. It is NOT acceptable to 'screw down the lid and forget' about a net connected app, especially if a widely-used OS is embedded. Exploits WILL surface, and maintenance of the system to protect against said expoits WILL be necessary.