Subject: bug#70071: [FR] Provide official install scripts without requiring root, e.g., by making a static build possible

From: Eli Zaretskii <[email-masked]>
Date: Fri, 29 Mar 2024 17:33:50 +0300

> From: Rudi C <[email-masked]>
> Date: Fri, 29 Mar 2024 17:54:13 +0330
> Cc: [email-masked]
> 
> My primary concern with your approach is that it requires numerous manual steps, each of which can
> introduce new points of failure.

Sorry, I don't understand: what numerous steps do you have in mind?

All that is needed is to specify an accessible directory via --prefix
option to the configure script.  Everything else happens automatically.

> Would it be possible for you to provide a single script that I can run on Ubuntu
> (even on older versions with an outdated gcc, etc.) that will build Emacs under my home directory (~/)?

The script already exists, it just needs an option to be specified.
Since only you, the user, can decide where to install Emacs ("~/" is
just one possibility, but some subdirectory of the home directory is
also possible), there's no way to know that in advance anyway.

> Linux packaging is designed for administrators with root access who don't require cutting-edge packages, and
> it simply doesn't allow me to install Emacs 29. While it's true that the distributions may be at fault, I am unable
> to persuade the server administrators to change the distribution. However, I can run a script from gnu.com. In
> 2024, most software is distributed with an installer script or a portable binary that can be easily downloaded
> using `wget` into `~/bin`. The philosophy of shifting blame and not ensuring that things "just work" is one of
> the main issues with Emacs. Although distributions and administrators have their own challenges, and the
> world can be difficult, Emacs has the ability to provide official workarounds that can address its own pain
> points, even if it cannot solve every problem.

I don't think it's practical, sorry.  For starters, we don't have the
expert knowledge on board about each and every target system to do
what you are asking, even if we decided it to be our job.

> > What is a "portable build," and how does it differ from a "normal" build? Also, what is a "static build"?
> 
> While I don't claim to have a deep understanding of these terms, my interpretation is that dynamic linking
> connects to the installed system libraries, making the binary heavily reliant on the specific conditions of its
> host operating system. In contrast, a statically linked binary includes all of its dependencies within itself,
> allowing a single binary for Linux x86 to function on most other similar systems. A "portable" binary is one that
> can be downloaded using wget and executed without relying on any dependencies from the host operating
> system. Of course, no binary can be completely portable, and portability exists on a spectrum. However, some
> binaries are quite portable, such as those found at https://github.com/Mozilla-Ocho/llamafile.

Unfortunately, Emacs cannot use such techniques.  Its portability is
on the source level, not on the binary level.