doc: Update note on Emacs packages.

* doc/guix.texi ("Emacs packages"): Expand note to talk about differences
between native compilation upstream and as used in Guix.
This commit is contained in:
Liliana Marie Prikler 2024-06-23 15:17:07 +02:00
parent 93c48a813d
commit 8546ca946e
No known key found for this signature in database
GPG key ID: 442A84B8C70E2F87

View file

@ -1878,15 +1878,28 @@ running Emacs with the @option{--no-site-file} option (@pxref{Init
File,,, emacs, The GNU Emacs Manual}). File,,, emacs, The GNU Emacs Manual}).
@quotation Note @quotation Note
Emacs can now compile packages natively. Under the default Most Emacs variants are now capable of doing native compilation.
configuration, this means that Emacs packages will now be The approach taken by Guix Emacs however differs greatly
just-in-time (JIT) compiled as you use them, and the results from the approach taken upstream.
stored in a subdirectory of your @code{user-emacs-directory}.
Furthermore, the build system for Emacs packages transparently Upstream Emacs compiles packages just-in-time and typically places
supports native compilation, but note, that shared object files in a special folder within your
@code{emacs-minimal}---the default Emacs for building @code{user-emacs-directory}.
packages---has been configured without native compilation. These shared objects within said folder are organized in a
flat hierarchy, and their file names contain two hashes to
verify the original file name and contents of the source code.
Guix Emacs on the other hand prefers to compile packages ahead-of-time.
Shared objects retain much of the original file name and no hashes
are added to verify the original file name or the contents of the file.
Crucially, this allows Guix Emacs and packages built against it
to be grafted (@pxref{Security Updates, grafts}), but at the same time,
Guix Emacs lacks the hash-based verification of source code baked
into upstream Emacs. As this naming schema is trivial to exploit,
we disable just-in-time compilation.
Further note, that @code{emacs-minimal}---the default Emacs
for building packages---has been configured without native compilation.
To natively compile your emacs packages ahead of time, use a To natively compile your emacs packages ahead of time, use a
transformation like @option{--with-input=emacs-minimal=emacs}. transformation like @option{--with-input=emacs-minimal=emacs}.
@end quotation @end quotation