Typically reimplementing a library to be "native" to a particular platform allows for:


Simpler deployment and distribution
Easier debugging
More idiomatic APIs suitable for your exact platform
Often better performance (platform interop can be a pain)
Fixing design issues which are still in the original for compatibility


For example, I started the Noda Time project as a port of Joda Time. It simply isn't practical to use Joda Time directly from within .NET... you really don't want to have to spin up a JVM just to do date and time calculations, as well as working out how to do the interop between the two. An automated port (a la J#) might have been feasible, but the end result wouldn't have been a pleasant and idiomatic API to use from C#.

Why do people rewrite some libraries to many programming languages?
I'm trying to cross compile my kernel with touchscreen enabled, however my Respberry Pi fails to boot with the custom kernel.
I was trying to compile the kernel on my ubuntu 10.4 (x64) with different config files but after transferring the files to my Pi I was no longer able to boot it. 

These were the steps I followed as per various descriptions:  

apt-get install gcc-arm-linux-gnueabi make ncurses-dev ia32-libs


Then I downloaded the kernel source rpi-3.10.y and the tools

export KERNEL_SRC=/home/marco/kernel/linux-rpi-3.10.19
export CCPREFIX=/home/marco/kernel/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi- 
export MODULES_TEMP=/home/marco/kernel/modules/


&nbsp;
Get .config file from the running raspberry and transfer to the ubuntu machine 

zcat /proc/config.gz &gt; myconfigfromrpi.config 


&nbsp;
In the kernel source folder  

make mrproper
cp ../myconfigfromrpi.config ./.config
make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig 
make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig


Using editor I changed the line to be "CONFIG_LOCALVERSION"="+MW" and continue  

make ARCH=arm CROSS_COMPILE=${CCPREFIX}
make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP}
modules_install


In the folder /tools/mkimage  

./imagetool-uncompressed.py ${KERNEL_SRC}/arch/arm/boot/Image


The I transfer the new kernel as kernel_new.img to Respberry into folder /boot/ and update the config.txt accordingly. 

Transfer content of folder /lib/firmware/ to Respberry into folder /lib/firmware/
Transfer folder /lib/firmware/modules/3.10.19+mw to Respberry into folder /lib/modules/

Did I miss something or do I something wrong? 
