Just skimmed, out of curiosity, through the whole vProgs channel on Kaspa's R&D Telegram.
It's really interesting to follow the research process, instead of simply reading a smooth and digested white paper.
What's immediately clear is that this is not a thing that exists and is just waiting to be implemented, it's rather continuously explored and redifined.
The principles are clear. They want programs to run on Kaspa, executed outside of it and cryptographically proved to the L1 nodes. But it's fun to observe the number of complexities that arise from this "simple" goal.
How to resolve overlapping proofs without wasting work? How can vProg nodes keep a state that's robust to small reorgs? How to balance the desire not to commit to a single framework/language with the need for a standardized communication? Can a program prove stuff about itself, like that it crashes or runs out of gas, so that the system doesn't get stuck on those edge cases?
And the queen of them all: how the hell do you call a vProg from another one, while building a combined proof of execution? What makes these things provable is that they get converted into "circuits", but these circuits are pretty rigid monsters that can't really talk to each other natively. Plus they're run with private inputs (the "zero knowledge" part), so how do you even combine them without somehow sharing those inputs?
It's a rollercoaster, not a linear flow. At some point it just seems impossible, it's too complicated. But then someone pulls out a crypto trick, "hey let's tie program A and B through a commitment of private inputs, so they remain private but the link can't be faked". That seems to work, we're back on track, maybe this thing is really possible, let's go! Up to the next challenge...
(Don't quote me on any of the above, I missed many details and I'm sleepy. I do suggest it as a night read though, it's fun) good night.