Platforms: All POSIX, Windows where possible Goals: - High-level layer for device-independent tasks - Low-level layers for device-dependent tasks - Follow object-oriented design principals - Put most of the functionality into libraries, to foster rapid development of competing applications. Look at multimedia tools as an example: Apps like mplayer, kaffeine, kplayer, etc. are little more than user interfaces to the vast functionality of libs such as lame, libogg, libmpeg, libquicktime, etc. - Although the meat will go into libraries, let application development drive library development from the top down. I.e., develop applications first, so that the optimal library API becomes clear. This will lead to a simpler and more intuitive library design. Developing libraries strictly from the bottom up often means having to later shoe-horn them into applications that need something a little different. The resulting code is full of "shims" (bridges from the API needed by the program and the one provided by the library), and is usually not very cohesive. There are many ways to implement a set of features, and it's difficult to guess the best way. Developing apps from the top down, with no preconceived lower-level API will reveal the best way for you. Examples of device-independent projects Although robotics is a much smaller niche, and prone to highly specialized development, the device-independent concept can still help avoid redundant development work, and provide a common interface for beginners. - termcap/terminfo - gphoto - gimp-print Core utilities: Device-independent C library for common tasks/standard firmware - Allows use of generic source code that works with any Lego brick and interface - Hardware specific information is still available if needed Device-dependent libraries Media-specific level Programs linxt-like command line tools for uploading, downloading programs and firmware, checking battery level and other status, running, stopping programs, etc. GUI apps? Tools for working with experimental firmware Other Language support: C++ Java Matlab Pascal Perl Invite author of linxt to contribute Python Invite author of ? to contribute