Breaking the platform barrier
Alot of times people wonder what it takes to have a cross platform front end experience. What hurdles need to be overcome, just how hard is it, could xyz front end be tweaked to work on linux, etc. 14 months ago openMobile asked these same questions and came up with the following challenges:
- Plugins need to be platform and CPU architecture neutral
- Colors, fonts and images need to look exactly the same on all platforms
- User interaction needs to be identical on all platforms despite windows's focus based interaction and linuxs cursor based interaction
- Plugins need to be able to fully interact with the OS without resorting to API calls
- It needs to be fast even on embedded hardware
- Plugins need to be easily installable on any platform (plugin developers shouldn't need to package plugins on each platform)
Next came the list of operating systems and OS features we needed to support:
- Windows XP, Vista, Seven
- WinMM Audio Platform, CoreAudio Platform
- 32 and 64bit (running 32bit on a 64bit OS made no sense)
- Gnome and KDE Desktop environments
- Hal, DeviceKit and UDev device frameworks
- Hal and UPower power frameworks
- Alsa, pulseaudio and jack sound servers
- Almost a dozen different file systems including those normally found on OSX or windows
- XRandR, Xinerama and XF86 display managers
- Carbon, Cocoa and Quartz APIs
- CoreAudio framework
We set out to design a system that met every one of those goals and a year later have met ever single one (except CoreAudio on OSX).
- We chose the .net/mono framework to allow code execution on any OS or CPU architecture. That wasn't enough though, we had to provide a universal API that executing code could use to access OSSpecific functions, so we created the Core Framework with platform specific HALs. Combining the OSSpecific functions with the graphics engine we implemented over 3500 API calls to achieve the desired results (all while keeping the framework under 2MB).
- We created a graphics system from scratch that enabled strongly named fonts and colors which were guaranteed to look the same on all platforms (allowing plugins to name regular windows fonts would make them useless down the road). A multi-layer openGL based graphics engine was used to ensure image handling and rendering were identical to the pixel on every platform.
- We created a low level input system designed for multi-input and multi-touch interaction with the front end. Six months after its creation the technology to finally use it was rolled out as MPX (which our platform fully supports). By creating our own user input "drivers" we guaranteed user interaction was identical on all platforms. We further abstracted platform specific nuances by creating our Devices API ensuring the user sees hardware the same on all platforms regardless of how the OS sees it.
- To ensure speed on even embedded hardware we created a high speed OpenGL graphics engine which automatically adapts to the capabilities of a graphics card even if its an Embedded OpenGL ES GPU.
- Finally, to easily get this out to end users in a single package we created the Open Installer platform. Ompkg files are typically smaller then even .7z files, allow installation on any OS or architecture and allow advanced installation rules and scripting to ensure powerful deployment potential.