Just to shed some more light on the general problem, without (unfortunately) being able to help much:
When the shader is loaded, it is compiled by the driver before it's sent to the graphics card.
This compilation is the obvious place where things "go wrong" between hardware vendors.
Some compilers are less strict then others, so if you wrote some un-standard code (probably without realizing), it's highly likely that it will behave differently on different hardware.
One good practice is to always specify shader version in the shader program, this generally makes the compiler behave more predictable.
Also don't forget to read the output of the compiler with glGetShaderInfoLog during debug, to catch any warnings.