The Samsung Nexus S was released in late 2010 and debuted Android 2.3 Gingerbread running on hardware that was very similar to the Samsung Galaxy S, but dropped a microSD card slot and added NFC. It contained a single core 1.0 GHz processor, 512 MB of RAM, 16 MB of internal storage and a 4.0-inch, 480 by 800 pixel, Samsung AMOLED panel. The Nexus S was released running Android 2.3 and was updated through various stages of Gingerbread. Later on, the device received Android 4.0 Ice Cream Sandwich, but received the final update in October 2012, by which time the device was running Android 4.1.2 Jelly Bean. Google then dropped support for the Nexus S.
However, with the Nexus S being a Nexus, and with the Android community being as friendly and happening as it is, plus the device being very similar to the Galaxy S, it has benefited from a cottage industry developing new ROMs for the device. Android 6.0 Marshmallow has relatively recently been introduced and so regular readers can already imagine what is comingn ext: yes, that's right, a developer has ported Android 6.0 Marshmallow to the Nexus S. The custom ROM is not without its compromises (more on this later) but the developer in question, Dmitry Grinberg, has a history of porting new Android versions to old hardware such as the Nexus 4 and 2012 Nexus 7. If you want to build Android Marshmallow for the Nexus S, you'll find full and thorough literature through the source link below, but for now let's talk about some of the compromises associated with running Android Marshmallow on late 2010 hardware.
One of the first issues that Dmitry ran against was that the Nexus S' Radio Interface Layer (or RIL, which is the part of the device that gives the operating system access to the radios) was missing a function. Dmitry's website goes into detail about the issue, which stems from how Android does not check the RIL version and Samsung's RIL hangs when presented with an unknown option, rather than aborting. On paper, the Nexus S' Radio Interface Layer is supported by Android Marshmallow, but a technicality between Android and Samsung's RIL meant that it would not work (and the device reports there being No SIM). In order to resolve the issue, Dmitry simply wrote his own Radio Interface Layer, which sub-loads Samsung's code. Dmitry's RIL works as it needs to and he has released it under the Android Open Source Project license as a part of the software release.
Another issue was that of the Hardware Abstraction Layer, or HAL, which with the Nexus S is described by Dmitry as being very old and no longer supported by Android Marshmallow. Dmity had to patch and redesign parts of the Samsung libraries used in the Nexus S so that they would be supported by Android 6.0. He also had to backport many new features into the latest official Nexus S kernel, including some software emulation for hardware features simply not present in the Nexus S. Dmity also notes that the Android RunTime, ART, can struggle on the Nexus S owing to the relatively slow processor and RAM available to the operating system (384 MB); with this in mind, he has made available a couple of patches that should improve matters. One is to overclock the device by 10%, putting the processor's maximum clock speed up to 1.1 GHz. The other is to increase the timeout of the ART compiler, which struggles to compile large applications such as Facebook or the Google Application. Also, owing to a technicality, the Nexus S will have 14.8 GB of internal storage rather than 15.8 GB because Dmitry decided against using the onboard EMMC storage and instead simply used the NAND, rather than mounting this as an internal SD card (this would slow things down and as we can gather from the rest of the post, the Nexus S needs all the performance breaks it can get).
Dmitry has a small list of things left to do on the device, including some work with the battery statistics, implementing a new kernel rather than the older one and resolving an issue with the APN settings reverting to IPv6. Dmitry does not consider any of these to be urgent as the ROM currently works.
As things stand, it's impressive work to get Android 6.0 Marshmallow working on a five year old device. If you are interested in updating your device, this is very much at your own risk, but hit up the source website below. You'll also need the ADB tools installed onto your computer and you'll need to download the image as well.