Platform is one the most overloaded terms in computer technology. When someone talks about supporting a platform they might be referring to an operating system platform, hardware platform, mobile platform, database platform, graphics hardware and software platform, service based platform, application based platform, a framework, or an architecture. Operating system platforms in use today include Windows (desktop, server, and Mobile), Linux, OS X, iOS, Android, Blackberry OS, Unix (and it’s variants), Chrome OS, and WebOS. Database platforms include Oracle, SQL Server, InterBase, Firebird, MySQL, DB2, Sybase, Informix, Paradox, Access, dBase, PostGreSQL, and SQLite.
Hardware platforms include Intel, AMD, ARM, Cell, and RISC processors. Application frameworks include Java, .NET, Mono, Spring, and Adobe Air. Service based and distributed systems include SOAP, REST, CORBA, DCOM, JavaRMI, DCE, Dabo, and other vendor specific services. For Web applications there are also a multitude of platforms and frameworks including IIS, Apache, ASP.NET, RadPHP Component Library (RCPL), Struts, Jave Server Pages(JSP), Java Server Faces (JSF), Google Web Toolkit (GWT), Rich Ajax Platform(RAP), Spring, Ruby on Rails, Flex, Django, Drupal, Dojo, and qooxdoo.
There are several emerging mobile cross platform application frameworks including PhoneGap, Appcelerator Titanium, Rhodes Mobile, Open Mobile, and JQueryMobile. There are even Platform as a Service (PaaS) choices - see the "Ever-Growing List of PaaS Companies and PaaS Projects"
Architectures can include desktop, embedded, client/server, distributed, multi-tier, and cloud. Graphics hardware platforms include NVidia, AMD, S3 Graphics, Via Technologies, Matrox, and Intel. Graphics, GUI and Windowing software frameworks include (but are not limited to) CUDA, GDI/GDI+, WPF, DirectX, OpenGL, XNA, OpenCL, 3DKit, Cocoa, Quartz, Rich Client Platform(RCP), wxWidgets, MFC, Flash, PixelLight, Silverlight, AWT, Swing, SWT, GTK/GTK+, Juce, XWindows, KDE, Qt, Motif, InterViews, and HTML 5.
With the cornucopia of choices developers have, it’s a great time to be a developer. It is also a challenging time to be a developer. Which platforms should you use? Which platforms will be around for the long term. No, I’m not going to define the length of "long term", but suffice it to say, it should at least be until the end of this decade. Is there an Application Platform that will help developers write one program and target several desktop, client/server, server, operating system, graphics, and mobile platforms? Many cross platform frameworks have tried and have either failed completely or failed to gain a strong following. Some frameworks and platforms are still trying to find their way.
Here are a few articles and blog posts about the challenges, failures, and end of notable operating systems and cross platform frameworks:
- Microsoft and the end of cross platform frameworks
- Apple and Symantec Bedrock
- The Rise and Fall of Go Corp
- Tablet Computing old and new
- What happened to Nokia?
- Shortchanging your Business with User-Hostile Platforms
- Native will beat Web apps on desktop too
- Nokia to developers: no Qt for Windows Mobile
- End of support for Visual Basic 6.0
- Will Platform as a Service solve all developer ills?
- Which cross platform framework is right for me?
What might an application platform include in order to attract the attention of developers who need to build applications for:
- Multiple operating systems
- Different graphics systems
- SQL and NoSQL databases
- Desktop, client/server, server, multi-tier, and cloud architectures
- Mobile and tablet devices
For all of the applications that will run on disparate systems, a successful application platform needs to avoid the "lowest common denominator syndrome" and include support for many of the following capabilities:
- Component based
- User defined Styles and Templates
- Native code CPU and GPU support
- 2D and 3D graphics
- Database and Cloud storage
- Data, Application, and Visualization services
- Graphic Animation and Effects
- Location, Camera, Notification, Accelerometer, and Gyroscope support
- Touch, Gesture, Motion, and Physics based interactive UIs
- Voice and Image recognition
The great thing about programming is that we have so many choices. The bad thing about programming is that we have so many choices. Just look at the plethora of Google Code APIs and you can understand how wonderful and complicated it is to have choices. We can also choose from many software and hardware industry and de-facto standards. My bottom line: the use of object oriented application frameworks can insulate us from underlying platform differences and changes.
What platforms and frameworks are you using in your software projects? What capabilities should an application platform provide?