Samsung does not provide an upgrade to Android 4, but you can install it using an alternative firmware, namely CyanogenMod. Beware that these instructions could potentially break your phone! I was hesitating to install it CyanogenMod for a long time, but at the end it was very worth it.
Instructions for installing CyanogenMod can be found at http://wiki.cyanogenmod.com/wiki/Samsung_Galaxy_S:_Full_Update_Guide but I did not fully understand them while reading through it, so here is my step by step guide.
Install Heimdall on your computer. Heimdall is necessary to flash the Galaxy S firmware. For installation on Fedora check here, for an Ubuntu 32bit package here and for an Ubuntu 64bit package here. Installers for
Download the ClockworkMod Recovery software.
wget http://cmw.22aaf3.com/aries/gt-i9000/root/hardcore-speedmod.tar tar xf hardcore-speedmod.tar
- Turn off the phone and connect the USB cable to the computer but not yet to the phone.
Switch the phone into download mode by holding down the home button and volume down. At the same time connect the USB cable to the Galaxy S. The screen will show you the phone is in download mode. You can now release the buttons and run the command
heimdall flash --kernel zImage
The new firmware will be flashed and the phone will reboot automatically. You should see something like hardcore@speedmod written in Settings > About phone > Kernel version if everything worked fine.
4. Download the latest firmware from http://download.cyanogenmod.com/?type=nightly&device=galaxysmtd and the latest Google Apps from http://wiki.cyanogenmod.com/wiki/Latest_Version#Google_Apps
With your cellphone still connected via USB, click on connect storage to PC so that your internal and external SD cards are mounted and copy the two files into the root folder of the phone (where the Android folder is).
- Unmount the volumes and disconnect the phone. Power off the phone and disconnect the USB cable. Boot into the ClockworkMod Recovery by holding volume Up, home and the power button till the screen flashes.
You can navigate the menu with the volume up and down buttons and select an entry by shorty pressing the power button. Select wipe data/factory reset and confirm with Yes — delete all user data. Then select wipe cache partition and confirm Yes – Wipe Cache. Now go to install zip from sdcard, choose zip from sdcard and select cm-9 firmware. Confirm the install, select again choosel zip from sdcard, select the gapps zip file and confirm the install. No click on ++Go Back++ and reboot the system.
Your Android phone should now be running Android 4. In my case the phone did not start at first but was stuck in a reboot loop. After hitting my head against the wall, what helped was to go into the recovery mode again (press volume up, power and home buttons at the same time) and to flash the firmware again. No idea why it did not work the first time, but in the end all is working and worth the hour of work. CyanogenMod rocks! The phone has many new features, looks better, is faster and joy to use again. Instead of buying a new phone, try to upgrade the firmware.