Symbian PIPS and Nokia Open C

symbian.gifNokia have just announced Open C which is based on Symbian PIPS. Tommi at thinks "this could be a big thing".

Without PIPS and Open C, Symbian OS already has some support for POSIX in that it provides an implementation of the C Standard Library (STDLIB). I have previously ported large complex multi-threaded Linux code to Symbian using STDLIB and extra Symbian functions for memory handling, threading and sockets (the latter in STDLIB didn’t work for me). According to the PIPS press release, functions will now be packaged up into industry standard libraries – libc, libm, libpthread and libdl and tightly integrated with Symbian OS to optimise performance and memory usage. Hence, PIPS is can be thought of as an improved STDLIB.

According to the latest What’s New for Developers on Forum Nokia, Open C extends PIPS to include libz, libcrypt, libcrypto, libglib, and libssl. These will effectively required to port a large number of existing Linux applications. 

The first question I have been asked in the past is whether PIPS will allow Nokia to port S60 to Linux. Well, no. It allows Linux code to be more easily ported to Symbian but not the other way around. So what does PIPS add? According to the press release…

"… it is now realistic and desirable to migrate desktop and server code onto mobile devices, opening up exciting possibilities and attracting differently skilled developers to the Symbian ecosystem."

The interesting bit for me is that PIPS will also allow developers to create new non-UI code (engine) code without having to think about Symbian idioms – and yet remain optimised for performance and memory usage. This last bit is important. Symbian C++ uses proprietary idioms for a reason – to optimise performance and memory usage – but this tends to confuse newcomers and generally makes development more difficult and time consuming than on other platforms. 

Symbian Partners and Licensees (eg Nokia and Sony Ericsson) will also be able to take advantage of PIPS. If they started developing new modules this way (or even re-engineer old ones) they could re-use these within existing or future Linux (or even other OS) based platforms.

However, there are limitations. The What’s New for Developers on Forum Nokia goes on to say…

"Developers now can create much of their applications’ business logic using familiar C library functions, while relying on Symbian and S60 APIs to create the application UIs and to provide access to native Symbian and S60 functions."

Hence, it will still be necessary to use Symbian C++ for creating the UI and accessing phone specific features.

For those of you who understand Symbian: Going forward, I wonder if it’s possible for POSIX code to talk to Symbian Servers and this could be generalised in some way in a C/C++ wrapper. After all, this is usually IPC under Symbian. Asynchronous requests might be implemented via callbacks into C. Obviously, this all depends on the complexity of each IPC interface. In this way, it might be possible to create a complete application without using any Symbian idioms.