Under development POC to support deterministic Go runtime. Options:
- TinyGo
- Too many restrictions
- Not (yet) obvious how to intercept certain
- Code rewriting/transpiling
- Feasible (can even do it via
toolexec
option ongo build
with import paths changes) - A bit difficult because we have to make sure to avoid Go stdlib or Temporal lib itself. Therefore we'd have to replace a lot of public runtime.
- Lots to replace (e.g. panicking on crypto rand), but again technically doable
- Feasible (can even do it via
- WASM
- Hard to replace
runtime.newproc
and map iterations to make deterministic - Using Go WASM is targeted for JS and therefore you have to have a harness like this just to work
- Hard to replace
- Yaegi
- Seemingly limited ability to change runtime interpretation of
- golang.org/x/tools/go/ssa/interp
- Most code unexported, so no injection points, but code is small that hopefully hijacking small pieces is safe
- Currently evaluating in this repository