Since fork won’t work right on windows i just never use it and avoid things that do.

Since threads don’t work right on linux i just never [1] use them and avoid things that do.

Better solutions are: As mentioned, spinning out independent activities into extra processes, manually spawned with the likes of open3 and connected via pipes, or network servers.

Alternatively, powerful tools exist for solving problems without threads or fork: Coro provides the ability to create light-weight fibers in a single-thread process between which the developer can switch when they deem it time to switch. AnyEvent and kids provides easy asynchronous processing for IO-bound activities.

The other comments here are a lot more thoughtful than mine. You mentioned a couple of modules and ‘system’. The modules you mention are indeed very useful. I just thought it was useful to get Win32::Process into the record, as that is the lowest level module that’s available.