And regarding fallbacks: The `Function` created by `taskToMachineDetailsFunction` checks for the success of the task with:
```
public BasicMachineDetails apply(ProcessTaskWrapper<?> input) {
    if (input.getExitCode() != 0) {
        LOG.warn("Non-zero exit code when fetching machine details for {}; guessing anonymous linux", location);
        return new BasicMachineDetails(new BasicHardwareDetails(null, null),
                BasicOsDetails.Factory.ANONYMOUS_LINUX);
    }
```
Is this sufficient or could an error elsewhere cause the function to be skipped? I guess it only makes sense to call `.requiringZeroAndReturningStdout()` on the task if fallback is false.