Compile on run

From what I’ve learned so far, I’m guessing that most if not close to all Fedora Linux Desktop software is compile on run. I will appreciate it if someone can provide a reference where I can learn more about what things are and what things are not compile on run. Thanks in advance for your help.

I think, for the most part, you are probably referring to Scripting Languages like Bash and Python. You may also be referring to Interpreted Languages like JavaScript (there is some overlap in the definition).

2 Likes

To add to @glb 's comment, whether software source code is compiled or interpreted depends on what programming language it is written in. This is not something that Fedora does/enforces—it is how the programming language works. For more information on this, please read:

and use your preferred search engine to search for “compiled vs interpreted programming languages”.

Also note that some languages may have both components—they are interpreted, but can be compiled into “bytecode” to improve performance (we ship pre-compiled bytecode with Python packages in Fedora). More information here:

2 Likes

No, it’s the opposite: most, if not all software included in Fedora is run from a binary rpm package that has already been built (compiled) for you on Fedora infrastructure and is provided in software repositories.

Some software is provided as “sandboxed” flatpak packages, which are “compiled” as well.

If you run sudo dnf update you see that dnf is downloading packages and directly installing them, no compiling inbetween.

An exception, for example, are kernel modules (key words: kmod, akmod, dkms) that are compiled on your system upon update.

1 Like

Ah, but rpms are basically zip files with extra “headers”—they’re not compiled. The software that is packaged in the rpm may be compiled if it is written in a language that requires compilation. Otherwise, rpms just put files in the right places. So for Python files for example, they simply put the module etc. files in the right location. There is no compilation involved. Here’s an example of fpaste, which is a pure Python script and does not need compilation:

$ rpmls fpaste
-rwxr-xr-x  /usr/bin/fpaste
drwxr-xr-x  /usr/share/doc/fpaste
-rw-r--r--  /usr/share/doc/fpaste/README.rst
-rw-r--r--  /usr/share/doc/fpaste/TODO
drwxr-xr-x  /usr/share/licenses/fpaste
-rw-r--r--  /usr/share/licenses/fpaste/COPYING
-rw-r--r--  /usr/share/man/man1/fpaste.1.gz

So, we should distinguish rpms from the programming language itself. I’d say rpms are built to include the necessary files, and the software in them may be compiled. Similarly, flatpaks are built and the software may need to be compiled during the flatpak building process. I.e., flatpaks and rpms are simply “packages”

1 Like

Well what started this was that I read a couple articles on software that enabled C programs to be compile on run. The idea being to compile to binary then run rather than be interpreted. I put that together with various comments I heard in Fedora meetings and thought that perhaps many parts of Fedora were complie on run. Then as the performance issue was brought up which I failed to consider before. So compile on run might be a hugh performance hit in an application starting up.

I know Python and others are run mostly as interpreted rather tokenized or directly. I thought Python could also be compiled to binary. I’ve never tried it since Python interpreted performance has always met my needs. Did I misunderstand; can Python be compiled to binary?

Not natively as far as I’m aware. There must be a way with some third party modules etc. I guess, but it’s designed to be interpreted by the Python interpreter in general.