Nice look.
Out of the blue this is hard to say, you should try to remove parts of your shader to verify what specific part is done differently on both platforms.
It could be due to the fact that you’re assigning the fragment an alpha of 1, and then potentially adding another 1 to that through the application of your kernel. You’d likely only notice this if blending was enabled and the color was multiplied by alpha, which could be the difference between the two cases. Try color = vec4(0) instead.
Otherwise, the incorrect result looks very much like values are being blown out greater than white. This is usually an artifact of the convolution kernel summing to a value greater than 1, even though your kernel appears to be okay in this regard. You might want to expand the loop and see if the compiler is having some issues with it.