diff --git a/NEWS b/NEWS
index a2db010..c2475e3 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,12 @@
   The function is expanded to the contents of the file.  The contents are
   expanded verbatim except that the final newline, if any, is stripped.
 
+* The interface to GNU make's "jobserver" is stable as documented in the
+  manual, for tools which may want to access it.
+
+  WARNING: Backward-incompatibility! The internal-only command line option
+  --jobserver-fds has been renamed for publishing, to --jobserver-auth.
+
 * VMS-specific changes:
 
   * Perl test harness now works.
diff --git a/main.c b/main.c
index 6239702..896a00e 100644
--- a/main.c
+++ b/main.c
@@ -269,9 +269,9 @@
 
 static unsigned int inf_jobs = 0;
 
-/* File descriptors for the jobs pipe.  */
+/* Authorization for the jobserver.  */
 
-char *jobserver_fds = NULL;
+char *jobserver_auth = NULL;
 
 /* Handle for the mutex used on Windows to synchronize output of our
    children under -O.  */
@@ -471,7 +471,7 @@
 
     /* These are long-style options.  */
     { CHAR_MAX+1, strlist, &db_flags, 1, 1, 0, "basic", 0, "debug" },
-    { CHAR_MAX+2, string, &jobserver_fds, 1, 1, 0, 0, 0, "jobserver-fds" },
+    { CHAR_MAX+2, string, &jobserver_auth, 1, 1, 0, 0, 0, "jobserver-auth" },
     { CHAR_MAX+3, flag, &trace_flag, 1, 1, 0, 0, 0, "trace" },
     { CHAR_MAX+4, flag, &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
       "no-print-directory" },
@@ -1597,22 +1597,22 @@
   starting_directory = current_directory;
 
 #ifdef MAKE_JOBSERVER
-  /* If the jobserver_fds option is seen, make sure that -j is reasonable.
+  /* If the jobserver_auth option is seen, make sure that -j is reasonable.
      This can't be usefully set in the makefile, and we want to verify the
-     FDs are valid before any other aspect of make has a chance to start
-     using them for something else.  */
+     authorization is valid before any other aspect of make has a chance to
+     start using it for something else.  */
 
-  if (jobserver_fds)
+  if (jobserver_auth)
     {
-      /* The combination of jobserver_fds and !job_slots means we're using the
-         jobserver.  If !job_slots and no jobserver_fds, we can start infinite
-         jobs.  If we see both jobserver_fds and job_slots >0 that means the
-         user set -j explicitly.  This is broken; in this case obey the user
-         (ignore the jobserver for this make) but print a message.  If we've
-         restarted, we already printed this the first time.  */
+      /* The combination of jobserver_auth and !job_slots means we're using
+         the jobserver.  If !job_slots and no jobserver_auth, we can start
+         infinite jobs.  If we see both jobserver_auth and job_slots >0 that
+         means the user set -j explicitly.  This is broken; in this case obey
+         the user (ignore the jobserver for this make) but print a message.
+         If we've restarted, we already printed this the first time.  */
 
       if (!job_slots)
-        jobserver_parse_arg (jobserver_fds);
+        jobserver_parse_auth (jobserver_auth);
 
       else if (! restarts)
         O (error, NILF,
@@ -1622,8 +1622,8 @@
         {
           /* If job_slots is set now then we're not using jobserver */
           jobserver_clear ();
-          free (jobserver_fds);
-          jobserver_fds = NULL;
+          free (jobserver_auth);
+          jobserver_auth = NULL;
         }
     }
 #endif
@@ -2049,8 +2049,8 @@
       master_job_slots = job_slots;
       job_slots = 0;
 
-      /* Fill in the jobserver_fds for our children.  */
-      jobserver_fds = jobserver_get_arg ();
+      /* Fill in the jobserver_auth for our children.  */
+      jobserver_auth = jobserver_get_auth ();
     }
 #endif
 
@@ -3394,12 +3394,12 @@
 
       jobserver_clear ();
 
-      /* Clean out jobserver_fds so we don't pass this information to any
+      /* Clean out jobserver_auth so we don't pass this information to any
          sub-makes.  Also reset job_slots since it will be put on the command
          line, not in MAKEFLAGS.  */
       job_slots = default_job_slots;
-      free (jobserver_fds);
-      jobserver_fds = NULL;
+      free (jobserver_auth);
+      jobserver_auth = NULL;
     }
 }
 
diff --git a/os.h b/os.h
index 3ef222e..f8a5a23 100644
--- a/os.h
+++ b/os.h
@@ -26,10 +26,10 @@
 void jobserver_setup (int job_slots);
 
 /* Called in a child instance to connect to the jobserver.  */
-void jobserver_parse_arg (const char* arg);
+void jobserver_parse_auth (const char* auth);
 
 /* Returns an allocated buffer used to pass to child instances.  */
-char *jobserver_get_arg ();
+char *jobserver_get_auth ();
 
 /* Clear this instance's jobserver configuration.  */
 void jobserver_clear ();
@@ -61,18 +61,18 @@
 
 #else
 
-#define jobserver_enabled()       (0)
-#define jobserver_setup(_slots)   (void)(0)
-#define jobserver_parse_arg(_arg) (void)(0)
-#define jobserver_get_arg()       (NULL)
-#define jobserver_clear()         (void)(0)
-#define jobserver_release(_fatal) (void)(0)
-#define jobserver_acquire_all()   (0)
-#define jobserver_signal()        (void)(0)
-#define jobserver_pre_child(_r)   (void)(0)
-#define jobserver_post_child(_r)  (void)(0)
-#define jobserver_pre_acquire()   (void)(0)
-#define jobserver_acquire(_tmout) (0)
+#define jobserver_enabled()         (0)
+#define jobserver_setup(_slots)     (void)(0)
+#define jobserver_parse_auth(_auth) (void)(0)
+#define jobserver_get_auth()        (NULL)
+#define jobserver_clear()           (void)(0)
+#define jobserver_release(_fatal)   (void)(0)
+#define jobserver_acquire_all()     (0)
+#define jobserver_signal()          (void)(0)
+#define jobserver_pre_child(_r)     (void)(0)
+#define jobserver_post_child(_r)    (void)(0)
+#define jobserver_pre_acquire()     (void)(0)
+#define jobserver_acquire(_tmout)   (0)
 
 #endif
 
diff --git a/posixos.c b/posixos.c
index ffd52eb..9408305 100644
--- a/posixos.c
+++ b/posixos.c
@@ -80,12 +80,12 @@
 }
 
 void
-jobserver_parse_arg (const char* arg)
+jobserver_parse_auth (const char *auth)
 {
   /* Given the command-line parameter, parse it.  */
-  if (sscanf (arg, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
+  if (sscanf (auth, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
     OS (fatal, NILF,
-        _("internal error: invalid --jobserver-fds string '%s'"), arg);
+        _("internal error: invalid --jobserver-auth string '%s'"), auth);
 
   DB (DB_JOBS,
       (_("Jobserver client (fds %d,%d)\n"), job_fds[0], job_fds[1]));
@@ -115,11 +115,11 @@
 }
 
 char *
-jobserver_get_arg ()
+jobserver_get_auth ()
 {
-  char *fds = xmalloc ((INTSTR_LENGTH * 2) + 2);
-  sprintf (fds, "%d,%d", job_fds[0], job_fds[1]);
-  return fds;
+  char *auth = xmalloc ((INTSTR_LENGTH * 2) + 2);
+  sprintf (auth, "%d,%d", job_fds[0], job_fds[1]);
+  return auth;
 }
 
 unsigned int
diff --git a/tests/scripts/features/jobserver b/tests/scripts/features/jobserver
index cedd4b3..b5549cc 100644
--- a/tests/scripts/features/jobserver
+++ b/tests/scripts/features/jobserver
@@ -12,7 +12,7 @@
   return -1;
 }
 
-# Don't put --jobserver-fds into a re-exec'd MAKEFLAGS.
+# Don't put --jobserver-auth into a re-exec'd MAKEFLAGS.
 # We can't test this directly because there's no way a makefile can
 # show the value of MAKEFLAGS we were re-exec'd with.  We can intuit it
 # by looking for "disabling jobserver mode" warnings; we should only
@@ -59,3 +59,7 @@
 rmfiles('Makefile2');
 
 1;
+
+### Local Variables:
+### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
+### End:
diff --git a/w32/w32os.c b/w32/w32os.c
index 6255d15..170c6d4 100644
--- a/w32/w32os.c
+++ b/w32/w32os.c
@@ -64,30 +64,28 @@
 }
 
 void
-jobserver_parse_arg (const char* arg)
+jobserver_parse_auth (const char *auth)
 {
   jobserver_semaphore = OpenSemaphore (
   SEMAPHORE_ALL_ACCESS,   /* Semaphore access setting */
     FALSE,                  /* Child processes DON'T inherit */
-    arg);                   /* Semaphore name */
+    auth);                   /* Semaphore name */
 
   if (jobserver_semaphore == NULL)
     {
       DWORD err = GetLastError ();
       const char *estr = map_windows32_error_to_string (err);
-      fatal (NILF, strlen (arg) + INTSTR_LENGTH + strlen (estr),
+      fatal (NILF, strlen (auth) + INTSTR_LENGTH + strlen (estr),
              _("internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)"),
-             arg, err, estr);
+             auth, err, estr);
     }
-  DB (DB_JOBS, (_("Jobserver client (semaphore %s)\n"), arg));
+  DB (DB_JOBS, (_("Jobserver client (semaphore %s)\n"), auth));
 }
 
 char *
-jobserver_get_arg ()
+jobserver_get_auth ()
 {
-  char *fds = xmalloc (MAX_PATH + 1);
-  strcpy (fds, jobserver_semaphore_name);
-  return fds;
+  return xstrdup (jobserver_semaphore_name);
 }
 
 unsigned int
