diff --git a/gnu/packages/aux-files/emacs/comp-integrity.el b/gnu/packages/aux-files/emacs/comp-integrity.el
index abe7e7c0c9..4e8233a276 100644
--- a/gnu/packages/aux-files/emacs/comp-integrity.el
+++ b/gnu/packages/aux-files/emacs/comp-integrity.el
@@ -16,9 +16,9 @@
                 (let ((desc (substring-no-properties
                              (with-output-to-string
                                (help-fns-function-description-header ',fun)))))
-                  (cond ((string-search "native-compiled" desc) 'native)
-                        ((string-search "byte-compiled" desc) 'byte)
-                        ((string-search "built-in" desc) 'built-in)
+                  (cond ((string-search "native-comp-function" desc) 'native)
+                        ((string-search "byte-code-function" desc) 'byte)
+                        ((string-search "primitive-function" desc) 'built-in)
                         (t nil))))))))
 
   (defmacro expect-native (fun &optional feature)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index c5e671c6a9..4d14feb38b 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -100,7 +100,7 @@ (define (%emacs-modules build-system)
 (define-public emacs-minimal
   (package
     (name "emacs-minimal")
-    (version "29.4")
+    (version "30.1")
     ;; Note: When using (replacement …), ensure that comp-native-version-dir
     ;; stays the same across grafts.
     ;; Run `make check-system TESTS=emacs-native-comp' to ensure that grafts
@@ -111,7 +111,7 @@ (define-public emacs-minimal
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0dd2mh6maa7dc5f49qdzj7bi4hda4wfm1cvvgq560djcz537k2ds"))
+                "13qkdx515qv7m8b2mpd37p16frs0xgl7bw8xvv397bz6fspc3jkc"))
               (patches (search-patches "emacs-disable-jit-compilation.patch"
                                        "emacs-exec-path.patch"
                                        "emacs-fix-scheme-indent-function.patch"
@@ -172,7 +172,6 @@ (define-public emacs-minimal
                              "lisp/mail/feedmail.el"
                              "lisp/obsolete/pgg-pgp.el"
                              "lisp/obsolete/pgg-pgp5.el"
-                             "lisp/obsolete/terminal.el"
                              "lisp/org/ob-eval.el"
                              "lisp/textmodes/artist.el"
                              "lisp/progmodes/sh-script.el"
@@ -721,10 +720,6 @@ (define-public guile-emacs
                       ;; Likewise, we don't need to patch helper binaries
                       ;; like etags, ctags or ebrowse.
                       "^emacs(-[0-9]+(\\.[0-9]+)*)?$")))))
-              (add-after 'unpack 'help-patch-progam-file-names
-                (lambda _
-                  (call-with-output-file "lisp/obsolete/terminal.el"
-                    (lambda (port) (display port)))))
               (add-after 'configure 'touch-lisp/finder-inf.el
                 (lambda _
                   (call-with-output-file "lisp/finder-inf.el"
diff --git a/gnu/packages/patches/emacs-exec-path.patch b/gnu/packages/patches/emacs-exec-path.patch
index 9a76b0237d..6e33e25258 100644
--- a/gnu/packages/patches/emacs-exec-path.patch
+++ b/gnu/packages/patches/emacs-exec-path.patch
@@ -2,15 +2,17 @@ Do not capture the build-time value of $PATH in the 'emacs' executable
 since this can noticeably increase the size of the closure of Emacs
 with things like GCC being referenced.
 
---- a/lisp/loadup.el
-+++ b/lisp/loadup.el
-@@ -530,7 +530,8 @@ lost after dumping")))
-                         ((equal dump-mode "dump") "emacs")
-                         ((equal dump-mode "bootstrap") "emacs")
-                         ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp")
--                        (t (error "Unrecognized dump mode %s" dump-mode)))))
-+                        (t (error "Unrecognized dump mode %s" dump-mode))))
-+          (exec-path nil))
-       (when (and (featurep 'native-compile)
-                  (equal dump-mode "pdump"))
-         ;; Don't enable this before bootstrap is completed, as the
+Index: emacs-next/lisp/loadup.el
+===================================================================
+--- emacs-next.orig/lisp/loadup.el
++++ emacs-next/lisp/loadup.el
+@@ -599,7 +599,8 @@ lost after dumping")))
+                           ((equal dump-mode "dump") "emacs")
+                           ((equal dump-mode "bootstrap") "emacs")
+                           ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp")
+-                          (t (error "Unrecognized dump mode %s" dump-mode)))))
++                          (t (error "Unrecognized dump mode %s" dump-mode))))
++            (exec-path nil))
+         (when (and (featurep 'native-compile)
+                    (equal dump-mode "pdump"))
+           ;; Don't enable this before bootstrap is completed, as the
diff --git a/gnu/packages/patches/emacs-native-comp-driver-options.patch b/gnu/packages/patches/emacs-native-comp-driver-options.patch
index 308c4f1212..e4ed5a48f1 100644
--- a/gnu/packages/patches/emacs-native-comp-driver-options.patch
+++ b/gnu/packages/patches/emacs-native-comp-driver-options.patch
@@ -2,12 +2,13 @@ We substitute this anyway, so let's make it easier to substitute.
 
 --- a/lisp/emacs-lisp/comp.el
 +++ b/lisp/emacs-lisp/comp.el
-@@ -178,8 +178,7 @@ and above."
+@@ -203,9 +203,7 @@ and above."
    :type '(repeat string)
    :version "28.1")
  
--(defcustom native-comp-driver-options (when (eq system-type 'darwin)
--                                        '("-Wl,-w"))
+-(defcustom native-comp-driver-options
+-  (cond ((eq system-type 'darwin) '("-Wl,-w"))
+-        ((eq system-type 'cygwin) '("-Wl,-dynamicbase")))
 +(defcustom native-comp-driver-options nil
    "Options passed verbatim to the native compiler's back-end driver.
  Note that not all options are meaningful; typically only the options
diff --git a/gnu/packages/patches/emacs-native-comp-fix-filenames.patch b/gnu/packages/patches/emacs-native-comp-fix-filenames.patch
index 169323f290..7897fa9b04 100644
--- a/gnu/packages/patches/emacs-native-comp-fix-filenames.patch
+++ b/gnu/packages/patches/emacs-native-comp-fix-filenames.patch
@@ -12,11 +12,11 @@ way into the actual variable despite attempts to remove it by calling
 The user-visible procedure ‘startup-redirect-eln-cache’ is kept, as
 packages may require it, but only pushes the new value now.
 
-Index: emacs-29.2/src/comp.c
+Index: emacs-next/src/comp.c
 ===================================================================
---- emacs-29.2.orig/src/comp.c
-+++ emacs-29.2/src/comp.c
-@@ -4396,26 +4396,17 @@ DEFUN ("comp-el-to-eln-rel-filename", Fc
+--- emacs-next.orig/src/comp.c
++++ emacs-next/src/comp.c
+@@ -4403,26 +4403,17 @@ DEFUN ("comp-el-to-eln-rel-filename", Fc
         Scomp_el_to_eln_rel_filename, 1, 1, 0,
         doc: /* Return the relative name of the .eln file for FILENAME.
  FILENAME must exist, and if it's a symlink, the target must exist.
@@ -49,7 +49,7 @@ Index: emacs-29.2/src/comp.c
    if (NILP (Ffile_exists_p (filename)))
      xsignal1 (Qfile_missing, filename);
  
-@@ -4423,64 +4414,55 @@ one for the file name and another for it
+@@ -4430,64 +4421,55 @@ one for the file name and another for it
    filename = Fw32_long_file_name (filename);
  #endif
  
@@ -157,7 +157,7 @@ Index: emacs-29.2/src/comp.c
  }
  
  DEFUN ("comp-el-to-eln-filename", Fcomp_el_to_eln_filename,
-@@ -4494,13 +4476,7 @@ If BASE-DIR is non-nil, use it as the di
+@@ -4501,13 +4483,7 @@ If BASE-DIR is non-nil, use it as the di
  non-absolute BASE-DIR is interpreted as relative to `invocation-directory'.
  If BASE-DIR is omitted or nil, look for the first writable directory
  in `native-comp-eln-load-path', and use as BASE-DIR its subdirectory
@@ -172,7 +172,7 @@ Index: emacs-29.2/src/comp.c
    (Lisp_Object filename, Lisp_Object base_dir)
  {
    Lisp_Object source_filename = filename;
-@@ -4548,10 +4524,11 @@ the latter is supposed to be used by the
+@@ -4555,10 +4531,11 @@ the latter is supposed to be used by the
    Lisp_Object lisp_preloaded =
      Fgetenv_internal (build_string ("LISP_PRELOADED"), Qnil);
    base_dir = Fexpand_file_name (Vcomp_native_version_dir, base_dir);
@@ -186,7 +186,7 @@ Index: emacs-29.2/src/comp.c
  				      CALL1I (split-string, lisp_preloaded))))))
      base_dir = Fexpand_file_name (build_string ("preloaded"), base_dir);
  
-@@ -5863,10 +5840,7 @@ The last directory of this list is assum
+@@ -5875,10 +5852,7 @@ The last directory of this list is assum
  the system *.eln files, which are the files produced when building
  Emacs.  */);
  
@@ -198,11 +198,11 @@ Index: emacs-29.2/src/comp.c
  
    DEFVAR_LISP ("native-comp-enable-subr-trampolines",
  	       Vnative_comp_enable_subr_trampolines,
-Index: emacs-29.2/lisp/startup.el
+Index: emacs-next/lisp/startup.el
 ===================================================================
---- emacs-29.2.orig/lisp/startup.el
-+++ emacs-29.2/lisp/startup.el
-@@ -545,9 +545,6 @@ DIRS are relative."
+--- emacs-next.orig/lisp/startup.el
++++ emacs-next/lisp/startup.el
+@@ -527,9 +527,6 @@ DIRS are relative."
  (defvar native-comp-jit-compilation)
  (defvar native-comp-enable-subr-trampolines)
  
@@ -212,7 +212,7 @@ Index: emacs-29.2/lisp/startup.el
  (defun startup-redirect-eln-cache (cache-directory)
    "Redirect the user's eln-cache directory to CACHE-DIRECTORY.
  CACHE-DIRECTORY must be a single directory, a string.
-@@ -558,22 +555,10 @@ to `user-emacs-directory'.
+@@ -540,22 +537,10 @@ to `user-emacs-directory'.
  For best results, call this function in your early-init file,
  so that the rest of initialization and package loading uses
  the updated value."
@@ -232,10 +232,10 @@ Index: emacs-29.2/lisp/startup.el
 -    (setq startup--original-eln-load-path
 -          (copy-sequence native-comp-eln-load-path))))
 -
- (defun normal-top-level ()
-   "Emacs calls this function when it first starts up.
- It sets `command-line-processed', processes the command-line,
-@@ -1362,12 +1347,6 @@ please check its value")
+ (defun startup--rescale-elt-match-p (font-pattern font-object)
+   "Test whether FONT-OBJECT matches an element of `face-font-rescale-alist'.
+ FONT-OBJECT is a font-object that specifies a font to test.
+@@ -1383,12 +1368,6 @@ please check its value")
        startup-init-directory)))
    (setq early-init-file user-init-file)
  
@@ -248,7 +248,7 @@ Index: emacs-29.2/lisp/startup.el
    ;; If any package directory exists, initialize the package system.
    (and user-init-file
         package-enable-at-startup
-@@ -1502,12 +1481,6 @@ please check its value")
+@@ -1523,12 +1502,6 @@ please check its value")
          startup-init-directory))
       t)
  
@@ -261,10 +261,10 @@ Index: emacs-29.2/lisp/startup.el
      (when (and deactivate-mark transient-mark-mode)
        (with-current-buffer (window-buffer)
          (deactivate-mark)))
-Index: emacs-29.2/lisp/loadup.el
+Index: emacs-next/lisp/loadup.el
 ===================================================================
---- emacs-29.2.orig/lisp/loadup.el
-+++ emacs-29.2/lisp/loadup.el
+--- emacs-next.orig/lisp/loadup.el
++++ emacs-next/lisp/loadup.el
 @@ -53,6 +53,14 @@
  (setq redisplay--inhibit-bidi t)
  
@@ -280,9 +280,16 @@ Index: emacs-29.2/lisp/loadup.el
  
  ;; Add subdirectories to the load-path for files that might get
  ;; autoloaded when bootstrapping or running Emacs normally.
-@@ -494,22 +502,20 @@ lost after dumping")))
-             (concat eln-dest-dir "native-lisp/" comp-native-version-dir "/"))
+@@ -538,27 +546,25 @@ This to have it working when installed o
+ directory got moved.  This is set to be a pair in the form of:
+ \(rel-filename-from-install-bin . rel-filename-from-local-bin)."
+   (when (and load--bin-dest-dir load--eln-dest-dir)
+-      (setq eln-dest-dir
+-          (concat load--eln-dest-dir "native-lisp/" comp-native-version-dir "/"))
++      (setq load--eln-versioned-dest-dir
++            (concat load--eln-dest-dir "native-lisp/" comp-native-version-dir "/"))
        (maphash (lambda (_ cu)
+                (when (stringp (native-comp-unit-file cu))
                   (let* ((file (native-comp-unit-file cu))
 -                        (preloaded (equal (substring (file-name-directory file)
 -                                                     -10 -1)
@@ -302,33 +309,33 @@ Index: emacs-29.2/lisp/loadup.el
 -                                          (file-name-nondirectory
 -                                           file)
 -                                          eln-dest-dir-eff)
--                                         bin-dest-dir)
+-                                         load--bin-dest-dir)
 +                     (file-relative-name
 +                      (expand-file-name
 +                       (save-match-data
 +                         (string-match native-lisp-needle file)
 +                         (substring file (match-end 0)))
-+                       eln-dest-dir)
-+                      bin-dest-dir)
++                       load--eln-versioned-dest-dir)
++                      load--bin-dest-dir)
                       ;; Relative filename from the built uninstalled binary.
-                      (file-relative-name file invocation-directory)))))
- 	       comp-loaded-comp-units-h)))
-@@ -557,7 +563,9 @@ lost after dumping")))
-                  (equal dump-mode "pdump"))
-         ;; Don't enable this before bootstrap is completed, as the
-         ;; compiler infrastructure may not be usable yet.
--        (setq native-comp-enable-subr-trampolines t))
-+        (setq native-comp-enable-subr-trampolines t
-+              ;; We loaded everything we could.
-+              comp-file-preloaded-p nil))
-       (message "Dumping under the name %s" output)
-       (condition-case ()
-           (delete-file output)
-Index: emacs-29.2/src/Makefile.in
+                      (file-relative-name file invocation-directory))))))
+ 	     comp-loaded-comp-units-h)))
+@@ -644,7 +650,9 @@ directory got moved.  This is set to be
+                    (equal dump-mode "pdump"))
+           ;; Don't enable this before bootstrap is completed, as the
+           ;; compiler infrastructure may not be usable yet.
+-          (setq native-comp-enable-subr-trampolines t))
++          (setq native-comp-enable-subr-trampolines t
++                ;; We loaded everything we could.
++                comp-file-preloaded-p nil))
+         (message "Dumping under the name %s" output)
+         (condition-case ()
+             (delete-file output)
+Index: emacs-next/src/Makefile.in
 ===================================================================
---- emacs-29.2.orig/src/Makefile.in
-+++ emacs-29.2/src/Makefile.in
-@@ -553,6 +553,7 @@ shortlisp := $(filter-out ${shortlisp_fi
+--- emacs-next.orig/src/Makefile.in
++++ emacs-next/src/Makefile.in
+@@ -591,6 +591,7 @@ shortlisp := $(filter-out ${shortlisp_fi
  ## We don't really need to sort, but may as well use it to remove duplicates.
  shortlisp := loaddefs.el loadup.el $(sort ${shortlisp})
  export LISP_PRELOADED = ${shortlisp}
