Speed of light in general relativity

The answer to your questions is very nuanced for the most part. I'll start with the easy answers: Light does not experience time, neither does it experience no time, the most accurate statement I could probably make off-hand is that it experiences null time. Null time does not mean time has stopped, that would be zero time; null time means null time, null is not a number (isNaN(null)==True). Photons have no frame of rest (inertial or otherwise), as such it is impossible to discuss the time experienced by them because in order to do so you have to imagine a frame where they are at rest (which is impossible). So I can't say that light experiences slower time when travelling through warped spacetime.

But as for your first question, that is more complicated. In the comments (now deleted) I said it might be best for a black hole person to answer this than a GR person. The reason I said that is because black hole people probably answer this question so much that they've got great wording. Now I stand by my opinions sometimes and this is one of those times. So I went and looked up a great answer by a black hole person that is much better than anything I could have come up with. But link-only answers aren't fun, so here's the TL;DR version:

Special relativity does not say the speed of light is always constant (even though, as I'll get to, you can cheat such that it is). It says the speed of light is always constant when measured locally from an inertial frame of reference. An inertial frame of reference is a non-accelerating frame. The equivalence principle says that an accelerating frame is locally indistinguishable from a gravitational field. So that gives some room for the speed of light to not be measured consistently.

If you are in free-fall, your acceleration due to gravity cancels out the gravitational field (equivalent to accelerating the other direction) such that you are now in an inertial frame. Thus, if you measure the speed of light where you are, I guarantee you will get $c$. However, as stated, this is only valid locally. Say I'm free.....free-falling (couldn't help myself, sorry) and you are somewhere else and I measure the speed of light where you are, I'll get a different value than $c$ because it's not local any more and the gravitational field still changes the passage of time around you.

If you are in a gravity field and not free-falling, then you are not in an inertial frame and so will (probably) not measure the speed of light as exactly $c$, not even locally (What is this? Sorry folks, that must have been a brain tumor on my part or something. Obviously it's constant locally, I must have been thinking about just beyond local. Like if you were measuring from $10km$ up the speed from a source on the ground, which is non-local. Wow, what magic sauce was I smoking when I wrote that? Why did nobody call this out until now?). On Earth, the gravity field is small so the effect of this makes the difference from $c$ extremely small. Near a black hole, this effect becomes pronounced and very noticeable (thus, black hole people are more accustomed to answering questions about it).

However, there is a way to cheat to make the speed of light always appear constant even non-locally. Your measurement of the speed of light changes because your measurements of length and time change separately. You can get around this by measuring the speed of light with reference to measurements of length and time that are also changing. In the link I provided, the author uses lunar orbits and Earth days as his length and time references. Even though you wouldn't measure these as the same number of kilometers or seconds in every frame, every observer in every frame will agree that they measure the speed of light as about $12000$ Lunar Orbits/Earth Day. Why is this cheating? It's pretty much like saying the speed of light is 1 lightsecond/second or 1 lightyear/year. But so long as you can measure the length of the Lunar orbit and the duration of an Earth day, you'll always have a constant number for the speed of light (assuming proper mathematical approximations are made).


You can always choose such coordinates that $g_{\mu \nu}$ is equal to the Minkowski metric $\eta_{\mu \nu}$ at some given point $p$, then the speed of light is just $c$. Everything else is like in SR: only the Lorentz subgroup of 4-d rotations (of the tangential space) keeps the interval $c^2 dt^2 - dx^2$ invariant. So, the usual concept of 'speed of light' is not well-defined when there are arbitrary GCTs (general coordinate transformations). You can just say that $g_{\mu \nu} dx^{\mu} dx^{\nu}$ is always zero for the light ray, that would define its physics completely (I don't take QED effects into account, obviously).

UPD: what I meant was that if you define the speed of light as $c = dx / dt$ then it is invariant only under the Lorentz subgroup of GL. Arbitrary transformations from the general linear group can change it. For example, I can always scale the three spacial dimensions by an arbitrary factor $\lambda$ and leave the time dimension untouched. Then $c$ would obviously become $c_{\text new} = \lambda c$.