The major problem with the post is that it does not cover the complexity of the language itself.
L(p) should equal to L(d, p) where d is the definition of the language used to write p.
So it becomes a whole different question now.
And indeed for L(s) where s = (d,p) you can now find the most minimal language definition and an empty p such that it can produce x.
K_L(x) = |s| = |d| + |p|
And for input receiving programs we need to consider the input as part of the program itself as well.
But those are just formalities, the great beauty of Kolmogorov complexity starts to emerge when you start to consider archive utilities as an approximation for K(x).
Think K(x) ~ |Zip(X)| or K(x) ~ |Rar(x)| now you have a real tool to approximate K(x) and guess what it is already installed.
Now what about Kd(x,y) = K(x) - K(y)/K(x||y) ~ |Zip(x)| - |Zip(y)| / |Zip(x||y)|
It is a distance metric for how entropically far is x from y and that is very interesting and can be very useful for anomaly detection for instance or password strength comparison.