diff --git a/doc/guix.texi b/doc/guix.texi
index fde7892cfde720320ef3c49c7764f17d23629b55..f4f19949f1663a3228530338e3e9b65453e8cce0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11546,10 +11546,11 @@ The @code{(gnu services networking)} module provides services to configure
 the network interface.
 
 @cindex DHCP, networking service
-@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
-Return a service that runs @var{dhcp}, a Dynamic Host Configuration
-Protocol (DHCP) client, on all the non-loopback network interfaces.
-@end deffn
+@defvr {Scheme Variable} dhcp-client-service-type
+This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
+Protocol (DHCP) client, on all the non-loopback network interfaces.  Its value
+is the DHCP client package to use, @code{isc-dhcp} by default.
+@end defvr
 
 @deffn {Scheme Procedure} dhcpd-service-type
 This type defines a service that runs a DHCP daemon.  To create a
@@ -17168,7 +17169,7 @@ A helper function to quickly add php to an @code{nginx-server-configuration}.
 
 A simple services setup for nginx with php can look like this:
 @example
-(services (cons* (dhcp-client-service)
+(services (cons* (service dhcp-client-service-type)
                  (service php-fpm-service-type)
                  (service nginx-service-type
                           (nginx-server-configuration
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index c809b4a4a4241c74b8c435cdea3f63a26486c775..61a0e975c7c9cbc6cc16b950e7c93a23946ee14e 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -53,6 +53,7 @@ (define-module (gnu services networking)
                static-networking-service-type)
   #:export (%facebook-host-aliases
             dhcp-client-service
+            dhcp-client-service-type
 
             dhcpd-service-type
             dhcpd-configuration
@@ -202,9 +203,10 @@ (define ifaces
                                     "-pf" #$pid-file ifaces))))
                    (and (zero? (cdr (waitpid pid)))
                         (read-pid-file #$pid-file)))))
-      (stop #~(make-kill-destructor))))))
+      (stop #~(make-kill-destructor))))
+   isc-dhcp))
 
-(define* (dhcp-client-service #:key (dhcp isc-dhcp))
+(define* (dhcp-client-service #:key (dhcp isc-dhcp)) ;deprecated
   "Return a service that runs @var{dhcp}, a Dynamic Host Configuration
 Protocol (DHCP) client, on all the non-loopback network interfaces."
   (service dhcp-client-service-type dhcp))
diff --git a/gnu/system/examples/bare-bones.tmpl b/gnu/system/examples/bare-bones.tmpl
index b763258e52406a239c36eeed6fe13bce927eb992..889dcabe6450af9b266b0c39097b5d4cd2eac4ee 100644
--- a/gnu/system/examples/bare-bones.tmpl
+++ b/gnu/system/examples/bare-bones.tmpl
@@ -44,7 +44,7 @@
 
   ;; Add services to the baseline: a DHCP client and
   ;; an SSH server.
-  (services (cons* (dhcp-client-service)
+  (services (cons* (service dhcp-client-service-type)
                    (service openssh-service-type
                             (openssh-configuration
                               (port-number 2222)))
diff --git a/gnu/system/examples/beaglebone-black.tmpl b/gnu/system/examples/beaglebone-black.tmpl
index d1130c76b6cbc743a40bda134789f683d009c885..efef682e3aebb28a2b615633861a012db4cb4919 100644
--- a/gnu/system/examples/beaglebone-black.tmpl
+++ b/gnu/system/examples/beaglebone-black.tmpl
@@ -45,7 +45,7 @@
   ;; Globally-installed packages.
   (packages (cons* screen openssh %base-packages))
 
-  (services (cons* (dhcp-client-service)
+  (services (cons* (service dhcp-client-service-type)
                    ;; mingetty does not work on serial lines.
                    ;; Use agetty with board-specific serial parameters.
                    (agetty-service
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index f97581de33fa5ee5375c41723418d80888ef6c06..896d4a8f88ceedeb05d8171fde03022b82718ee7 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -673,7 +673,7 @@ (define %avahi-os
     (name-service-switch %mdns-host-lookup-nss)
     (services (cons* (avahi-service #:debug? #t)
                      (dbus-service)
-                     (dhcp-client-service)        ;needed for multicast
+                     (service dhcp-client-service-type) ;needed for multicast
 
                      ;; Enable heavyweight debugging output.
                      (modify-services (operating-system-user-services
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 5c8ca85c135af4b6143dddad250f3295f5ababbd..e0544bbcd2e8a794dacff13324c1af8b0a9c8895 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -35,7 +35,7 @@ (define-module (gnu tests databases)
 
 (define %memcached-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service memcached-service-type)))
 
 (define* (run-memcached-test #:optional (port 11211))
@@ -130,7 +130,7 @@ (define %mongodb-os
   (operating-system
     (inherit
      (simple-operating-system
-      (dhcp-client-service)
+      (service dhcp-client-service-type)
       (service mongodb-service-type)))
     (packages (cons* mongodb
                      %base-packages))))
diff --git a/gnu/tests/dict.scm b/gnu/tests/dict.scm
index dd60ffd4644fce039224e916aff212434d84802c..c50e3cd6daa949ce6b5c4c2ccdf73c3816e9af93 100644
--- a/gnu/tests/dict.scm
+++ b/gnu/tests/dict.scm
@@ -34,7 +34,7 @@ (define-module (gnu tests dict)
 
 (define %dicod-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service dicod-service-type
             (dicod-configuration
              (interfaces '("0.0.0.0"))
diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
index 5677969fac6cb5952ea1546a82e20e6dfcd0e642..33aa4d3437ab99bbe03d021e421314e617b9931c 100644
--- a/gnu/tests/mail.scm
+++ b/gnu/tests/mail.scm
@@ -36,7 +36,7 @@ (define-module (gnu tests mail)
 
 (define %opensmtpd-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service opensmtpd-service-type
             (opensmtpd-configuration
              (config-file
@@ -155,7 +155,7 @@ (define %test-opensmtpd
 
 (define %exim-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service mail-aliases-service-type '())
    (service exim-service-type
             (exim-configuration
@@ -283,7 +283,7 @@ (define %test-exim
 
 (define %dovecot-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (dovecot-service #:config
                     (dovecot-configuration
                      (disable-plaintext-auth? #f)
diff --git a/gnu/tests/messaging.scm b/gnu/tests/messaging.scm
index f5f99b9f563b25d39073f12fdb5ff577173dc577..36afb987af4c6458d07c484256f6d55444c4a8e6 100644
--- a/gnu/tests/messaging.scm
+++ b/gnu/tests/messaging.scm
@@ -35,7 +35,7 @@ (define (run-xmpp-test name xmpp-service pid-file create-account)
   "Run a test of an OS running XMPP-SERVICE, which writes its PID to PID-FILE."
   (define os
     (marionette-operating-system
-     (simple-operating-system (dhcp-client-service)
+     (simple-operating-system (service dhcp-client-service-type)
                               xmpp-service)
      #:imported-modules '((gnu services herd))))
 
@@ -167,7 +167,7 @@ (define %test-prosody
 (define (run-bitlbee-test)
   (define os
     (marionette-operating-system
-     (simple-operating-system (dhcp-client-service)
+     (simple-operating-system (service dhcp-client-service-type)
                               (service bitlbee-service-type
                                        (bitlbee-configuration
                                         (interface "0.0.0.0"))))
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index 67899987cefd19adf3c0d5a21ae70fdfb6352f2c..3320a19a7738a07fcf3f816144ea1a97abf48029 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -85,7 +85,7 @@ (define marionette
 
 (define %prometheus-node-exporter-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service prometheus-node-exporter-service-type
             (prometheus-node-exporter-configuration))))
 
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index ceba7f7d5d12c26ae0594fc16b36e73d22a76554..9f12a4ae8d8849379b97571f08dbf9fcb11b0f46 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -39,7 +39,7 @@ (define-module (gnu tests networking)
 (define %inetd-os
   ;; Operating system with 2 inetd services.
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service inetd-service-type
             (inetd-configuration
              (entries (list
@@ -463,7 +463,7 @@ (define inetd-echo-port 7)
   (define os
     (marionette-operating-system
      (simple-operating-system
-      (dhcp-client-service)
+      (service dhcp-client-service-type)
       (service inetd-service-type
                (inetd-configuration
                 (entries (list
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index 140f03779b209fb03ce4b73dea0c8b83cbf74c84..7ef9f1f7bfbc3f1c7727de5dd106004bbac80d20 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -55,7 +55,7 @@ (define %base-os
     (services (cons*
                (service rpcbind-service-type
                         (rpcbind-configuration))
-               (dhcp-client-service)
+               (service dhcp-client-service-type)
                %base-services))))
 
 (define (run-nfs-test name socket)
diff --git a/gnu/tests/rsync.scm b/gnu/tests/rsync.scm
index a6f8fa2bd18b528604f9c84ac8a9bdbcbd58e322..096580022fe07680a5bd409267c9df06d982c9b9 100644
--- a/gnu/tests/rsync.scm
+++ b/gnu/tests/rsync.scm
@@ -111,7 +111,7 @@ (define* %rsync-os
   ;; Return operating system under test.
   (let ((base-os
          (simple-operating-system
-          (dhcp-client-service)
+          (service dhcp-client-service-type)
           (service rsync-service-type))))
     (operating-system
       (inherit base-os)
diff --git a/gnu/tests/ssh.scm b/gnu/tests/ssh.scm
index 2e40122addaf2f02b303c53656e7774cf7ea4cbc..e5cd439cdf9e98cd5da57c641139ec74bdb01c99 100644
--- a/gnu/tests/ssh.scm
+++ b/gnu/tests/ssh.scm
@@ -39,7 +39,7 @@ (define* (run-ssh-test name ssh-service pid-file #:key (sftp? #f))
 When SFTP? is true, run an SFTP server test."
   (define os
     (marionette-operating-system
-     (simple-operating-system (dhcp-client-service) ssh-service)
+     (simple-operating-system (service dhcp-client-service-type) ssh-service)
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
   (define vm
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 4409b8a12b3d823852806aa9eef7c30d6c477e46..230aa9edf9e5895a7b16e9fd51378284dfcb02fe 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -92,7 +92,7 @@ (define %cgit-os
   ;; Operating system under test.
   (let ((base-os
          (simple-operating-system
-          (dhcp-client-service)
+          (service dhcp-client-service-type)
           (service cgit-service-type
                    (cgit-configuration
                     (nginx %cgit-configuration-nginx)))
@@ -237,7 +237,7 @@ (define %git-nginx-configuration
 
 (define %git-http-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service fcgiwrap-service-type)
    (service nginx-service-type %git-nginx-configuration)
    %test-repository-service))
@@ -328,7 +328,7 @@ (define %gitolite-test-admin-keypair
 
 (define %gitolite-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service openssh-service-type)
    (service gitolite-service-type
             (gitolite-configuration
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index c2939355b25445439be31653378ce88d935a924f..fbdec208050398bddfe8ec8a311b3af4f9fad908 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -32,7 +32,7 @@ (define-module (gnu tests virtualization)
 
 (define %libvirt-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (dbus-service)
    (polkit-service)
    (service libvirt-service-type)))
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 2e209fee97cc7eff7e77b66bd1b2358dbf357fd4..319655396a84e113bcfa46b1bdb5b056715659c2 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -125,7 +125,7 @@ (define marionette
 
 (define %httpd-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service httpd-service-type
             (httpd-configuration
              (config
@@ -154,7 +154,7 @@ (define %nginx-servers
 (define %nginx-os
   ;; Operating system under test.
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service nginx-service-type
             (nginx-configuration
              (log-directory "/var/log/nginx")
@@ -188,7 +188,7 @@ (define %varnish-vcl
 
 (define %varnish-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    ;; Pretend to be a web server that serves %index.html-contents.
    (service varnish-service-type
             (varnish-configuration
@@ -237,7 +237,7 @@ (define %php-fpm-nginx-server-blocks
 (define %php-fpm-os
   ;; Operating system under test.
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service php-fpm-service-type)
    (service nginx-service-type
             (nginx-configuration
@@ -392,7 +392,7 @@ (define %hpcguix-web-specs
 
 (define %hpcguix-web-os
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service hpcguix-web-service-type
             (hpcguix-web-configuration
              (specs %hpcguix-web-specs)))))
@@ -407,7 +407,7 @@ (define %test-hpcguix-web
 (define %tailon-os
   ;; Operating system under test.
   (simple-operating-system
-   (dhcp-client-service)
+   (service dhcp-client-service-type)
    (service tailon-service-type
             (tailon-configuration
              (config-file
diff --git a/guix/gexp.scm b/guix/gexp.scm
index f7a23db87220ba8217d54691bcae024226486f94..ba0d642b17e977ab8fd3b7e2dd92aad44e2859b9 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -438,6 +438,14 @@ (define-record-type <file-append>
   (base   file-append-base)                    ;<package> | <derivation> | ...
   (suffix file-append-suffix))                 ;list of strings
 
+(define (write-file-append file port)
+  (match file
+    (($ <file-append> base suffix)
+     (format port "#<file-append ~s ~s>" base
+             (string-join suffix)))))
+
+(set-record-type-printer! <file-append> write-file-append)
+
 (define (file-append base . suffix)
   "Return a <file-append> object that expands to the concatenation of BASE and
 SUFFIX."
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index a129efdfcbcb19c3d4b628c5e04ed376212bddb5..23d2da49031a0a217db7532a8c788fb40af2c0f2 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -153,8 +153,8 @@ cat > "$tmpfile" <<EOF
 
 (operating-system
   $OS_BASE
-  (services (cons* (dhcp-client-service)
-                   (dhcp-client-service) ;twice!
+  (services (cons* (service dhcp-client-service-type)
+                   (service dhcp-client-service-type) ;twice!
                    %base-services)))
 EOF