protected BaseOverthereConnection(
     final String protocol,
     final ConnectionOptions options,
     final AddressPortMapper mapper,
     final boolean canStartProcess) {
   this.protocol = checkNotNull(protocol, "Cannot create OverthereConnection with null protocol");
   this.os = options.getEnum(OPERATING_SYSTEM, OperatingSystemFamily.class);
   this.connectionTimeoutMillis =
       options.getInteger(CONNECTION_TIMEOUT_MILLIS, DEFAULT_CONNECTION_TIMEOUT_MILLIS);
   this.temporaryDirectoryPath =
       options.get(TEMPORARY_DIRECTORY_PATH, os.getDefaultTemporaryDirectoryPath());
   this.deleteTemporaryDirectoryOnDisconnect =
       options.getBoolean(
           TEMPORARY_DIRECTORY_DELETE_ON_DISCONNECT,
           DEFAULT_TEMPORARY_DIRECTORY_DELETE_ON_DISCONNECT);
   this.temporaryFileCreationRetries =
       options.getInteger(
           TEMPORARY_FILE_CREATION_RETRIES, DEFAULT_TEMPORARY_FILE_CREATION_RETRIES);
   this.canStartProcess = canStartProcess;
   this.mapper =
       checkNotNull(mapper, "Cannot create OverthereConnection with null addres-port mapper");
   this.options = options;
 }