An Up-To-Date Development Environment For The Nokia N-Gage

One of the brave but unsuccessful plays from Nokia during their glory years was the N-Gage, an attempt to merge a Symbian smartphone and a handheld game console. It may not have managed to dethrone the Game Boy Advance but it still has a band of enthusiasts, and among them is [Michael Fitzmayer] who has produced a CMake-based toolchain for the original Symbian SDK. This is intended to ease development on the devices by making them more accessible to the tools of the 2020s, and may serve to bring a new generation of applications to those old Nokias still lying forgotten in dusty drawers.

In much of the public imagination, the invention of the smartphone came with the release of the first Apple iPhone in 2007. Hackaday readers will of course trace the smartphone back much further than that to an original IBM prototype, and will remind any doubters that the Nokias which the iPhone vanquished were very successful smartphones without any of Cupertino’s magic in sight. Nokia’s tragedy was that they appeared not to understand what they had in Symbian, and released a bewildering array of devices intended to satisfy every possible market without recognizing that the market they needed to serve was their customers being easily able to run the apps of their choice on the things.

Symbian itself has long ago become a piece of abandonware, but during its chequered history there was a period in which an open-source version was released. It would be nice to think that projects such as this one might revive interest in this capable yet forgotten operating system, as with the passage of a decade the cost of hardware which might run it has fallen to the point of affordability. Does anyone want to relive the 2000s?

Header image: Evan-Amos, Public domain.

18 thoughts on “An Up-To-Date Development Environment For The Nokia N-Gage

  1. > Nokia’s tragedy was that they appeared not to understand what they had in Symbian

    Leading up to the Microsoft takeover, the board of directors were filled with moles who attempted to bring the market value down. They deliberately destroyed the Symbian, Android and Linux development projects and Stephen Elop finally destroyed the market faith in the company by openly disparaging their own operating system. It was a hostile takeover – all the engineers, developers, and the directors knew the value of the Symbian ecosystem and that’s exactly why it had to be destroyed: Microsoft wanted to make room on the smartphone market to sell Windows phones, especially on the developing markets where others had not yet entered, and Nokia was in their way.

    1. Nokia honestly didnt get hurt by any of this in the long run. They did not really want to invest in the smart phone market so MS buying their smartphone division for $9B was an enticing deal. Especially since they bought it back from MS for only $35M.

      1. Didn’t get hurt? Hundreds of thousands of people were laid off, an entire country was almost plunged into recession, and the Nokia parent company didn’t buy it back – that was HMD Global and all the manufacturing is outsourced to FIH Mobile, which is Foxconn.

        The reason they didn’t “want” to invest in the smart phone market is exactly because Microsoft wanted to clear space in the market. They bought the board of directors off to create a Nokia-sized hole to fit Windows phones in.

  2. I miss my old Taco phone. It worked great, had a colour screen, could play mp3’s from an MMC card. You could even record from the FM radio! Sadly 2G is gone here in Australia and my gen1 N-Gage went through a flood several years ago. I still have it floating around here somewhere.

    1. If you can find the open source version, you could scrap the 2G modem and install a 5G modem. Definitely a lot of work, and you won’t find me attempting it, but someone sufficiently motivated would find it possible.

  3. I used to program for Symbian back in the day. It was a goddamned nightmare. There was the core of a good idea there, but every feature, and I mean _every single feature_, was implemented in the most arse-backwards, counterintuitive, least useful way.

    For example: they used exceptions. (The whole system was programmed in C++.) Except, not C++ exceptions, because the early versions of Symbian predated those and they didn’t bother to migrate later. No, these were macro-based exceptions based around setjmp/longjmp equivalents. These didn’t unroll the stack when exceptions were thrown, which meant that anything which required a destructor on the stack just got leaked. So, instead they introduced a thing called a cleanup stack, which is basically a stack-based allocator which is exception aware. But, of course, this is super fragile as you still have to manually push stuff onto the cleanup stack to actually have them cleaned up. They basically reinvented Objective C autoallocation pools, except in a way which requires error-prone manual work every single time you allocate an object.

    Then there’s strings. These are based around descriptors, which are template-based sized char containers. This seems like a good idea, but they come in a bewildering variety of kinds, so there’s TBuf/TBufC for a mutable/immutable string on the stack, TLitC for a const string in constant memory, TPtr/TPtrC for a dynamically sized mutable/immutable string owned by someone else, HBufC for a runtime-sized constant string on the heap which _does_ own its data, RBuf for a runtime-sized mutable string which owns its data. _In addition_ these can be const, or allocated from the heap rather than put on the stack, or both. And these aren’t type compatible. Not only are two descriptors of the same type different maximum sizes, but many of these can’t be converted to other forms. There is TDes/TDesC, which is supposed to provide a unified view of a descriptor, but many of the system APIs require an explicit typed descriptor! If the API calls for a TBufC* and you have an RBuf you just have to damn well copy the string onto the stack before you call the API.

    Oh, and there are 8-bit and 16-bit versions of all of those. Because 16-bit values are big enough for Unicode. Right?

    It’s, like, the worst possible way to design a string API. It completely misses what people actually want out of an API, which is to be able to fiddle with strings safely and easily. The fundamental _idea_ is good, to reduce the possibility of buffer overruns, but the actual implementation is the worst. You can’t even go away and implement your own easy, safe std::string clone, because the Symbian exceptions mean you can’t rely on your destructor being called.

    Things got better in the later days, and they started allowing programming in proper C++, but only a subset of the APIs were supported. If you wanted to do anything exotic you still had to use the Symbian C++ API.

    1. “For example: they used exceptions. (The whole system was programmed in C++.) Except, not C++ exceptions,”

      wow! it’s so heartening to see i’m not the only one still bitter about this mistake 20 years later!

  4. > Nokia’s tragedy was that they appeared not to understand what they had in Symbian

    i did a little symbian development around 2001/2002 for my psion revo clamshell palmtop. i hated it. it was too high level (C++!) for me to feel the charm of like palmos, and too low-level hacky (a ridiculous subset of C++ with counter-C++ features) for me to feel like it was the future of light cross-platform development. i have come to hate android and actively desire a competitor but i don’t ever want to program for symbian again.

    i also used maemo on nokia’s n810, and i was no fan of it either. it had the advantage of using a lot of normal open source software, but that was also its huge disadvantage…none of the interfaces stayed stable so i couldn’t leverage work from older or newer versions of the same/related OSes. they just used whatever open source component fit, rather than deciding on a single API or overarching design and doing the work to support it as the underlying hardware and drivers changed. it makes me skeptical about other attempts to throw together an open source phone OS from disparate third party components like ubuntuphone or whatever they call the mess of OSes available for the pine phone. in my present desperation, i might consider it as an alternative to android but i don’t think it’s the right answer.

    tbh, that sentence should be written about microsoft and dot-net. microsoft’s tragedy was that they appeared not to understand what they had in dot-net. in 2001, microsoft sent people to college campuses telling CS students about what they were going to do with dot-net, reimplement their entire application ecosystem in dot net and then provide dot net runtimes for disparate devices so you could use the same or similar software on your portable ARM device as on your laptop or PC. i scoffed at them at the time, a mix between “this will never work” and “microsoft will never do it.” turns out i was only half right, because the design they presented to us turned out to be basically android, which now actually fulfills that promise. but microsoft didn’t do it. they had this huge institutional power and the benefit of tremendous foresight but somehow the whole concept died and someone else ate their lunch.

    i really think older android was perfect. a decent API, the promised land of fantastic actual real life portability across a vast surface of hardware types, good enough bare metal access when you need it, a consistent and usable GUI interface. i just wish they would stop senselessly sabotaging things in the new versions. and the monopolistic tie-in to google services makes it implausible for a third party to fork it and maintain a not-being-evil OS that fills the niche without sacrificing google services. sigh.

    1. If I remember correctly, I had the 3650, and I loved it too. I had some 3rd party software that would turn my ringers and vibrator on and off depending on which cell tower I was connected to. Going to uni – ringers off,vibrator on. Going home – vibrator off, ringers on. Wonderful.

  5. Yes, I want to relive the 2000s, before the FAANGs ruined the internet. When Google’s motto was still “don’t be evil.” When you could buy a decent phone with a hardware keyboard, and long battery life. When web pages were light enough to browse with 64MB of ram, and you didn’t NEED 5G to download them…

    There’s more, but that’s a start.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.