Symbian OS is a modular system, and licensees who build products with it are expected to add, remove, and in some cases, modify, components. This means that Symbian OS software written for one phone may or may not be compatible with another phone. As well as cross-device compatibility, you may also want to consider compatibility between different versions (releases) of Symbian OS.
The extensive customisation facilities provided by Symbian OS mean
that not all phones support all the functionality it offers. There is, however,
a large core of interfaces that will be present on all phones. Example of
common interfaces are the large Kernel user library (euser.dll
),
and the engines for the key PIM applications Contacts and Agenda.
Pre-platform developers should therefore either check with the phone manufacturer that the interfaces that they require are supported in the phone, or rely on the common interfaces.
The components that can be removed or modified are defined in the Customisation Kit license. This information is also published publicly in the "Symbian OS System Definition" papers on the Symbian Developer Network.
User interfaces are likely to be the area of greatest difference between the Symbian OS and the eventual phone. This variability of UIs, over a common operating system core, means that Symbian OS encourages programs to be written with a clean separation of UI code from application logic (or engine) code.
Note that if you use a language other than C++, you may gain stronger cross-phone compatibility. MIDP Java, WAP, and HTML, are all designed to allow user interfaces to be coded without detailed knowledge of the target phone, whether Symbian-OS or otherwise.
Symbian have attempted to maintain backward compatibility so that developers can write code that runs on multiple versions of Symbian OS.
Backward source compatibility means that code written for older versions can be made to run on newer versions by simply rebuilding it. Symbian also try to maintain backward binary compatibility (allowing old code to run on newer versions without rebuilding), though this is not always possible when new functionality is introduced. In v9.1 in particular, the introduction of platform security has required many source compatibility breaks. See Symbian OS changes for platform security for more information.