does that mean that GLSL is not backwards compatible? I have shaders 3.0 here
No, that's certainly not the case, ShaderModel 2 is just a subset of Model 3.
What I wrote above applies to old Geforces/Radeons (not supporting fragment programs or just Shader-Model 1.x): The driver exposes all functionality (all extensions are available) and the shader compiler is able to produce valid code, but the card just can't handle it in hardware.
In that case, Geforces don't activate the fragment program and just use parameters (coming from the Vertex-Shader) affecting the fixed-function pipeline for rendering - in my case that's just the vertex-colour (resulting in a grey gradient from front to back).
The same happens on ati with non-conform shader-code (the compiler won't produce code from the fragment-program and leaves the fixed-function-pipeline active on rendering) - there
should be a message about that in the console-window...
If the shader-code exceeds the size-limit on shader2-hardware, ati falls back to software-rendering (I'm not quite sure what Nvidias does - this only applies to Geforce5xxx-based cards).
The vertex-program is seldom a problem since it can be emulated in software without such a big performance-penalty (mapped to sse/3dnow, just producing heavy bus-traffic).
What's the actual problem here is still a bit out of my understanding.
I've tested both versions on Radeon 9600 (Shader 2.0) & Geforce 7600 (Shader 3.0) and they both work fine. If the shader doesn't work on your Radeon, it's probably because of different driver version (I'm using Catalyst 8.4 from September 2007) which might include a somewhat different shader-compiler or just features new bugs...
A
crash, however, is most probably caused by my sucking code

Edit: Updated drivers to current version and can't see any difference, still it's not impossible that some other code-path for other/newer hardware might cause trouble of some kind...