If you specify that a fragment shader has input variables, then OpenGL is going to assume that there is a corresponding vertex processing shader that has appropriate output variables. If there isn't, then you get a linker error. And your vertex shader doesn't provide corresponding outputs.