Remix.run Logo
kodablah 5 days ago

There just aren't good Python sandboxing approaches. There are subinterpreters but they can slow to start from scratch. There are higher-level sandboxing approaches like microvms, but they have setup overhead and are not easy to use from inside Python.

At Temporal, we required a sandbox but didn't have any security requirement, so we wrote it from scratch with eval/exec and a custom importer [0]. It is not a foolproof sandbox, but it does a good job at isolating state, intercepting and preventing illegal calls we don't like, and allowing some imports to "pass through" the outside instead of being reloaded for performance reasons.

0 - https://github.com/temporalio/sdk-python?tab=readme-ov-file#...

achierius 5 days ago | parent | next [-]

Out of curiosity, why did you need a sandbox if you didn't have any security concerns?

kodablah 5 days ago | parent | next [-]

Sibling quoted the proper part. It's to help people keep code deterministic by helping prevent shared state and prevent non-deterministic standard library calls.

necovek 5 days ago | parent | prev [-]

  > but it does a good job at isolating state, intercepting and preventing illegal calls we don't like
Sounds like they put the reason just there.
fzzzy 5 days ago | parent | prev [-]

At least we have subinterpreters now. Even if they are slow that is a really good thing.