     /// Queue for executor delegate.
     let delegateQueue: DispatchQueue = DispatchQueue(label: "org.swift.driver.job-executor-delegate")
 
-    init(argsResolver: ArgsResolver, producerMap: [VirtualPath: Job], executorDelegate: JobExecutorDelegate?) {
+    /// The process protocol that will be used during job execution.
+    let processProtocol: ProcessProtocol.Type
+
+    init(
+      argsResolver: ArgsResolver,
+      producerMap: [VirtualPath: Job],
+      executorDelegate: JobExecutorDelegate?,
+      processProtocol: ProcessProtocol.Type = Process.self
+    ) {
       self.producerMap = producerMap
       self.argsResolver = argsResolver
       self.executorDelegate = executorDelegate
+      self.processProtocol = processProtocol
     }
   }
 

      }
    }

    return Context(argsResolver: argsResolver, producerMap: producerMap, executorDelegate: executorDelegate)
  }
}


  /// The job executor delegate.
  let executorDelegate: JobExecutorDelegate?

  /// The process protocol that will be used during job execution.
  let processProtocol: ProcessProtocol.Type

  public init(
    jobs: [Job],
    resolver: ArgsResolver,
    executorDelegate: JobExecutorDelegate? = nil,
    processProtocol: ProcessProtocol.Type = Process.self
  ) {
    self.jobs = jobs
    self.argsResolver = resolver
    self.executorDelegate = executorDelegate
    self.processProtocol = processProtocol
  }

  /// Build the given output.
