docs: @Nonnull
      public final Launcher decorateByPrefix(final String... prefix) {
          final Launcher outer = this;
          return new Launcher(outer) {
              @Override
              public boolean isUnix() {
                  return outer.isUnix();
              }
   
              @Override
              public Proc launch(ProcStarter starter) throws IOException {
                  starter.commands.addAll(0,Arrays.asList(prefix));
                  boolean[] masks = starter.masks;
                  if (masks != null) {
                      starter.masks = prefix(masks);
                  }
                  return outer.launch(starter);
              }
  
              @Override
              public Channel launchChannel(String[] cmd, OutputStream out, FilePath workDir, Map<String, String> envVars) throws IOException, InterruptedException {
                  return outer.launchChannel(prefix(cmd),out,workDir,envVars);
              }
  
              @Override
              public void kill(Map<String, String> modelEnvVars) throws IOException, InterruptedException {
                  outer.kill(modelEnvVars);
              }
  
              private String[] prefix(@Nonnull String[] args) {
                  String[] newArgs = new String[args.length+prefix.length];
                  System.arraycopy(prefix,0,newArgs,0,prefix.length);
                  System.arraycopy(args,0,newArgs,prefix.length,args.length);
                  return newArgs;
              }
  
              private boolean[] prefix(@Nonnull boolean[] args) {
                  boolean[] newArgs = new boolean[args.length+prefix.length];
                  System.arraycopy(args,0,newArgs,prefix.length,args.length);
                  return newArgs;
              }
          };
      }