Group: Software/research/ProgrammingLanguages

From LibrePlanet
Jump to: navigation, search
(Separate SDCC)
 
(26 intermediate revisions by one other user not shown)
Line 12: Line 12:
 
|- bgcolor="#6699ff"
 
|- bgcolor="#6699ff"
 
! Language
 
! Language
! Compiler
 
 
! Autoconf
 
! Autoconf
 
! Automake
 
! Automake
 
! Libtool<ref name="libtool">libtool is part of the autotools and it abstracts linking to make it work on a lot of operating systems. The status of the programming languages other than C and C++ can be found here: https://www.gnu.org/software/libtool/manual/libtool.html#Tags</ref>
 
! Libtool<ref name="libtool">libtool is part of the autotools and it abstracts linking to make it work on a lot of operating systems. The status of the programming languages other than C and C++ can be found here: https://www.gnu.org/software/libtool/manual/libtool.html#Tags</ref>
! Uses GCC 13
+
! GCC 15 support<ref>Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.</ref>
 +
! Other free compilers
 
! Shared libraries<ref name="shared-libraries">Shared libraries systems enable way better performances on older computers as it uses way less RAM.</ref>
 
! Shared libraries<ref name="shared-libraries">Shared libraries systems enable way better performances on older computers as it uses way less RAM.</ref>
 
! Microcontrollers<ref name="microcontrollers">Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.</ref>
 
! Microcontrollers<ref name="microcontrollers">Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.</ref>
Line 22: Line 22:
 
|-
 
|-
 
! Ada
 
! Ada
! gnat from GCC 13<ref name="gcc-advantages">Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.</ref>
 
 
|
 
|
 
|
 
|
 
|
 
|
| {{yes}}<ref name="gcc-supported-languages">https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/G_002b_002b-and-GCC.html</ref>
+
| {{yes}}<ref name="gcc-supported-languages">https://gcc.gnu.org/onlinedocs/gcc-15.1.0/gcc/G_002b_002b-and-GCC.html</ref>
 +
|
 
| {{yes}}
 
| {{yes}}
 
| {{yes|GCC}}<ref>At the FOSDEM 2023 I was told at the Ada table that it worked fine on microcontrollers with 16k of RAM, and that it was widely used in microcontrollers. The table also had several microcontroller boards.</ref>
 
| {{yes|GCC}}<ref>At the FOSDEM 2023 I was told at the Ada table that it worked fine on microcontrollers with 16k of RAM, and that it was widely used in microcontrollers. The table also had several microcontroller boards.</ref>
Line 32: Line 32:
 
|-
 
|-
 
! C
 
! C
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 +
* {{DistroPackage|Guix|cc65}}
 +
* {{DistroPackage|Guix|clang}}
 +
* {{DistroPackage|Guix|dev86}}
 +
* {{DistroPackage|Guix|mes}}
 +
* {{DistroPackage|Guix|tcc}}
 +
* {{DistroPackage|Guix|sdcc}}
 
| {{yes|defaults to shared libraries}}
 
| {{yes|defaults to shared libraries}}
 
| {{yes|GCC, SDCC}}
 
| {{yes|GCC, SDCC}}
| {{Orange|Drafts are available gratis, probably not under free licenses.}}<ref>Ideally the specifications should be available under free licenses.</ref>
 
|-
 
! C
 
! SDCC
 
| {{yes}}
 
| {{yes}}
 
|
 
|
 
|
 
| {{yes}}
 
 
| {{Orange|Drafts are available gratis, probably not under free licenses.}}<ref>Ideally the specifications should be available under free licenses.</ref>
 
| {{Orange|Drafts are available gratis, probably not under free licenses.}}<ref>Ideally the specifications should be available under free licenses.</ref>
 
|-
 
|-
 
! C++
 
! C++
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 
| {{yes|defaults to shared libraries}}
 
| {{yes|defaults to shared libraries}}
 
| {{yes|GCC, other?}}
 
| {{yes|GCC, other?}}
 
| ?
 
| ?
 +
|-
 +
! COBOL
 +
|
 +
|
 +
|
 +
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 +
* {{DistroPackage|Guix|gnucobol}}
 +
|
 +
|
 
|-
 
|-
 
! D
 
! D
! GCC 13<ref name="gcc-advantages"></ref>
 
 
|
 
|
 
|
 
|
Line 72: Line 77:
 
|-
 
|-
 
! Erlang
 
! Erlang
!
 
 
| {{yes}}
 
| {{yes}}
 
|
 
|
 
|
 
|
 
| {{no}}<ref name="gcc-supported-languages"></ref>
 
| {{no}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 82: Line 87:
 
|-
 
|-
 
! Fortran
 
! Fortran
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes|Fortran 77, Fortran 90, Fortran 95}}
 
| {{yes|Fortran 77, Fortran 90, Fortran 95}}
 
| {{yes|Fortran 77, Fortran 9x}}
 
| {{yes|Fortran 77, Fortran 9x}}
 
| {{yes|Fortran, Fortran 77}}
 
| {{yes|Fortran, Fortran 77}}
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 92: Line 97:
 
|-
 
|-
 
! GNU C
 
! GNU C
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 +
* {{DistroPackage|Guix|clang}}<ref>https://clang.llvm.org/features.html#gcccompat</ref>
 +
* {{DistroPackage|Guix|tcc}}
 
| {{yes|defaults to shared libraries}}
 
| {{yes|defaults to shared libraries}}
 
| {{yes|GCC}}
 
| {{yes|GCC}}
Line 102: Line 109:
 
|-
 
|-
 
! Go
 
! Go
! gccgo from GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes|basic support for gccgo}}
 
| {{yes|basic support for gccgo}}
 
| {{orange|no}}<ref>While automake isn't supported, it's still possible to use it if we add a rule to handle .go files in our Makefile.am. [https://mail.gnu.org/archive/html/automake-patches/2001-07/msg00012.html For some reasons] we then also need to add link rules for every program/library we create. I've created a [https://framagit.org/GNUtoo/autotools-go-hello-world autotools-go-hello-world] project to show how to use autoconf and automake together with go. Note that I didn't look if that scaled well or the limitations in more complex projects. For instance I'm unsure how to handle shared libraries, how to link to dependencies, etc.</ref>
 
| {{orange|no}}<ref>While automake isn't supported, it's still possible to use it if we add a rule to handle .go files in our Makefile.am. [https://mail.gnu.org/archive/html/automake-patches/2001-07/msg00012.html For some reasons] we then also need to add link rules for every program/library we create. I've created a [https://framagit.org/GNUtoo/autotools-go-hello-world autotools-go-hello-world] project to show how to use autoconf and automake together with go. Note that I didn't look if that scaled well or the limitations in more complex projects. For instance I'm unsure how to handle shared libraries, how to link to dependencies, etc.</ref>
Line 112: Line 118:
 
|-
 
|-
 
! Java
 
! Java
! GCJ from unmaintained GCC 6.5.0 <ref>https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/G_002b_002b-and-GCC.html#G_002b_002b-and-GCC</ref>
+
|
 
| {{yes|with CGJ}}
 
| {{yes|with CGJ}}
 
| {{yes|with CGJ}}
 
| {{yes|with CGJ}}
| {{no}}<ref name="gcc-supported-languages"></ref>
+
| {{no}}<ref name="gcc-supported-languages"></ref><ref>The last GCC version supporting GCJ seems to be 6.5.0: https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/G_002b_002b-and-GCC.html#G_002b_002b-and-GCC</ref>
 
|
 
|
 
|
 
|
 
| ?
 
| ?
 +
|-
 +
! Modula 2
 +
|
 +
|
 +
|
 +
| {{yes}}<ref name="gcc-modula2-languages">https://gcc.gnu.org/onlinedocs/gcc-15.1.0/gcc/Standards.html#Modula-2-language</ref>
 +
|
 +
|
 +
|
 
|-
 
|-
 
! Objective-C
 
! Objective-C
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
|
 
|
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 131: Line 146:
 
|-
 
|-
 
! Objective-C++
 
! Objective-C++
! GCC 13<ref name="gcc-advantages"></ref>
 
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
|
 
|
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 
| {{yes}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 141: Line 156:
 
|-
 
|-
 
! Rust
 
! Rust
|
 
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no|Work in progress}}<ref name="gcc-supported-languages"></ref>
 
| {{no|Work in progress}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 151: Line 166:
 
|-
 
|-
 
! Unified Parallel C.  
 
! Unified Parallel C.  
!
+
|
 
| {{yes|partial}}
 
| {{yes|partial}}
 
|
 
|
 
| {{no}}<ref name="gcc-supported-languages"></ref>
 
| {{no}}<ref name="gcc-supported-languages"></ref>
 +
|
 
|
 
|
 
|
 
|
Line 160: Line 176:
 
|-
 
|-
 
! Vala
 
! Vala
! valac
 
 
|
 
|
 
| {{yes|partial}}
 
| {{yes|partial}}
 
|
 
|
 
| {{yes|valac uses GCC}}
 
| {{yes|valac uses GCC}}
 +
|
 +
* {{DistroPackage|Guix|vala}}
 
|
 
|
 
| {{no|depends on glib}}
 
| {{no|depends on glib}}
Line 203: Line 220:
 
! Microcontrollers<ref name="microcontrollers"></ref>
 
! Microcontrollers<ref name="microcontrollers"></ref>
 
! Strict specifications<ref name="strict-specifications"></ref>
 
! Strict specifications<ref name="strict-specifications"></ref>
 +
|-
 +
! Perl
 +
| Perl
 +
| {{yes|C, some C libraries}}
 +
| {{no}}
 +
| {{no}}<ref>From [https://en.wikipedia.org/wiki/Perl#Implementation Wikipedia article on perl]: "No written specification or standard for the Perl language exists for Perl versions through Perl 5"</ref>
 
|-
 
|-
 
! rowspan="2" | Python
 
! rowspan="2" | Python
Line 213: Line 236:
 
| {{yes|C, some C libraries}}
 
| {{yes|C, some C libraries}}
 
| {{yes}}
 
| {{yes}}
 +
|-
 
|}
 
|}
  
Line 261: Line 285:
 
|- bgcolor="#6699ff"
 
|- bgcolor="#6699ff"
 
! Language
 
! Language
! Toolchain
+
! Toolchain package
 
! GNU/Hurd i586
 
! GNU/Hurd i586
 
! GNU/Linux armv7h
 
! GNU/Linux armv7h
Line 278: Line 302:
 
|-
 
|-
 
| C
 
| C
| gcc-toolchain
+
| {{DistroPackage|guix|gcc-toolchain}}
 
| {{Orange}}
 
| {{Orange}}
 
| {{Orange}}
 
| {{Orange}}
Line 292: Line 316:
 
|-
 
|-
 
| C#
 
| C#
| {{no}}
+
| {{DistroPackage|guix|mono}}
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
| {{Yes|Bootstraped from source}}<ref name="Adding_a_fully-bootstrapped_Mono">https://guix.gnu.org/en/blog/2024/adding-a-fully-bootstrapped-mono/</ref>
 +
|
 +
|
 +
|-
 +
| Go
 +
| {{DistroPackage|guix|gccgo}}
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
| {{Yes|Bootstraped from source}}
 +
|
 +
|
 +
|-
 +
| Go
 +
| {{DistroPackage|guix|go}}
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
| {{Yes|Bootstraped from source}}
 +
|
 +
|
 
|-
 
|-
 
| Haskell
 
| Haskell
| ghc
+
| {{DistroPackage|guix|ghc}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
| {{Orange|Bootstrapped from ghc-4 binaries}}
+
| {{Orange|Bootstrapped from generated C code}}<ref name="guix-ghc-4">https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/haskell.scm?h=v1.4.0#n363</ref>
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
| {{Orange|Bootstrapped from ghc-4 binaries}}
+
| {{Orange|Bootstrapped from generated C code}}<ref name="guix-ghc-4"></ref>
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
| {{no}}
 
|-
 
|-
 
| Java
 
| Java
| openjdk
+
| {{DistroPackage|guix|openjdk}}
 
| ?
 
| ?
 
| ?
 
| ?
Line 322: Line 385:
 
| ?
 
| ?
 
|-
 
|-
| colspan="2" | nim
+
| nim
 +
| {{DistroPackage|guix|nim}}
 
| ?
 
| ?
 
| ?
 
| ?
Line 336: Line 400:
 
|-
 
|-
 
| Rust
 
| Rust
| rustc
+
| {{DistroPackage|guix|rust}}
 
| {{no}}<ref name="rust-1.54-bootstrap">See supported-systems in the rust 1.54 package definition</ref>
 
| {{no}}<ref name="rust-1.54-bootstrap">See supported-systems in the rust 1.54 package definition</ref>
 
| {{no}}<ref name="rust-1.54-bootstrap"></ref>
 
| {{no}}<ref name="rust-1.54-bootstrap"></ref>
Line 350: Line 414:
 
|-
 
|-
 
| vala
 
| vala
| valac
+
| {{DistroPackage|guix|vala}}
 
| ?
 
| ?
 
| ?
 
| ?
Line 360: Line 424:
 
| ?
 
| ?
 
| {{Orange|Bootstrapped from generated C code}}<ref name="vala"></ref>
 
| {{Orange|Bootstrapped from generated C code}}<ref name="vala"></ref>
 +
| ?
 +
| ?
 +
|-
 +
| zig
 +
| {{DistroPackage|guix|vala}}
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| {{yes|Bootstrapped from source}}<ref>https://guix.gnu.org/en/blog/2026/gnu-guix-1.5.0-released/</ref><ref>https://m.jakstys.lt/2024/zig-reproduced-without-binaries/</ref>
 
| ?
 
| ?
 
| ?
 
| ?
Line 416: Line 494:
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 
| {{yes}}
 +
|-
 +
| Ruby
 +
| ruby
 +
| {{yes}}<ref name="parabola-ruby">Before it was broken due to the removal of rubygems, but it now works agains thanks to libre/ruby.</ref>
 +
| {{yes}}<ref name="parabola-ruby"></ref>
 +
| {{yes}}<ref name="parabola-ruby"></ref>
 
|-
 
|-
 
| Rust
 
| Rust
Line 625: Line 709:
  
 
<references />
 
<references />
 +
 +
{{featured resource|month=September|year=2025}}

Latest revision as of 10:08, 2 April 2026

Introduction

The goal of this page is to understand the status of various programming languages and toolchains. It can help people deciding on a programming language to choose or to learn, or enable people to understand where distributions need contributions to support well a language.

It could also contain information on what language works where or if we can target specific operating systems with free software or not.

Toolchain status

Compilers features and languages

Language Autoconf Automake Libtool[1] GCC 15 support[2] Other free compilers Shared libraries[3] Microcontrollers[4] Strict specifications[5]
Ada Yes[6] Yes GCC[7] Yes[8]
C Yes Yes Yes Yes[6]

cc65

clang

dev86

mes

tcc

sdcc

defaults to shared libraries GCC, SDCC Drafts are available gratis, probably not under free licenses.[9]
C++ Yes Yes Yes Yes[6] defaults to shared libraries GCC, other? ?
COBOL Yes[6]

gnucobol

D Yes[6] ?
Erlang Yes No[6] ?
Fortran Fortran 77, Fortran 90, Fortran 95 Fortran 77, Fortran 9x Fortran, Fortran 77 Yes[6] ?
GNU C Yes Yes Yes Yes[6]

clang[10]

tcc

defaults to shared libraries GCC Documented under the GFDL.[11]
Go basic support for gccgo no[12] Yes Yes[6] ?
Java with CGJ with CGJ No[6][13] ?
Modula 2 Yes[14]
Objective-C Yes Yes Yes[6] ?
Objective-C++ Yes Yes Yes[6] ?
Rust No No No Work in progress[6] No[15]
Unified Parallel C. partial No[6] ?
Vala partial valac uses GCC

vala

depends on glib ?

Compilers bootstraping

Compiler Languages Dependencies
gcc-ada
  • Ada
Depends on gcc-ada
nim
  • nim
nim depends on itself but translated C files are provided by upstream
valac
  • vala
valac depends on itself but translated C files are provided by upstream

Interpreters features and languages

Language Interpreter Dependencies Microcontrollers[4] Strict specifications[5]
Perl Perl C, some C libraries No No[16]
Python CPython C, some C libraries No ?
MicroPython C, some C libraries Yes

Build system status

Build system Cross compilation Easy to support in distributions Targets
Autotools Yes Yes
  • Most Posix-like systems[17].
  • Windows support possible, but it requires special care[18].
setup.py ? Yes

Didstributions status

Guix status

Guix is the most strict FSDG compliant distribution with regard to languages support: it requires the bootstrap process to be reproducible.

While there are still binary compilers being used in the bootstrap process for some languages, other languages are completely bootstrapped from source.

Language Toolchain package GNU/Hurd i586 GNU/Linux armv7h GNU/Linux aarch64 GNU/Linux i686 GNU/Linux mips64el GNU/Linux powerpc GNU/Linux powerpc64le GNU/Linux riscv64 GNU/Linux x86_64 Mingw i686 Mingw x86_64
Ada No
C

gcc-toolchain

Yes Yes Yes Bootstraped from source with a 25 MiB Guile binary.[19] Yes Yes Yes Yes Bootstraped from source with a 25 MiB Guile binary[19] Yes Yes
C#

mono

Bootstraped from source[20]
Go

gccgo

Bootstraped from source
Go

go

Bootstraped from source
Haskell

ghc

No No No Bootstrapped from generated C code[21] No No No No Bootstrapped from generated C code[21] No No
Java

openjdk

? ? ? bootstraped from source[22] ? ? ? ? bootstraped from source[22] ? ?
nim

nim

? ? ? Bootstrapped from generated C code[23] ? ? ? ? Bootstrapped from generated C code[23] ? ?
Rust

rust

No[24] No[24] Bootstrapped from source with mrustc[24] No[24] No[24] No[24] No[24] Bootstrapped from source with mrustc[24] Bootstrapped from source with mrustc[24] No[24] No[24]
vala

vala

? ? ? Bootstrapped from generated C code[25] ? ? ? ? Bootstrapped from generated C code[25] ? ?
zig

vala

? ? ? ? ? ? ? ? Bootstrapped from source[26][27] ? ?

Parabola status

Parabola has a policy which requires all the packages to be built from source. But it doesn't have a policy to reduce the size of the bootstrap binaries, so there can be circular dependencies.

Language Toolchain GNU/Linux armv7h GNU/Linux i686 GNU/Linux x86_64
Ada gcc-ada No Yes Yes
C gcc-toolchain Yes Yes Yes
C# mono Yes Yes Yes
Haskell ghc No Yes Yes
Java openjdk Yes Yes Yes
nim Yes Yes Yes
Ruby ruby Yes[28] Yes[28] Yes[28]
Rust rustc Yes Yes Yes
Vala valac Yes Yes Yes

Trisquel 11 (aramo)

Language Toolchain amd64 arm64 armhf ppc64el
Ada gcc-ada Yes Yes Yes Yes
C# mono Yes[29] Yes[29] Yes[29] Yes[29]
Haskell ghc Yes Yes Yes Yes

Standalone toolchains

Programming languages Distributor Release Host Target Source code review
  • Ada
Adacore 2021[30] GNU/Linux (i686?) ARM ELF 32bit
Source[31] License[32]
als-2021-20210701-19A88-src.tar.gz
alt-ergo-for-spark-2021-20210518-19982-src.tar.gz
antlr-3.4-complete.jar
aunit-2021-20210518-19DC5-src.tar.gz
aws-2021-20210518-19F65-src.tar.gz
bb-runtimes-2021-20210518-19CE8-src.tar.gz
binutils-2.33.50s-2021-20210518-19EF2-src.tar.gz GPL 3+
colibri-2021-20210518-19CDE-src.tar.gz
cvc4-2021-20210518-19B60-src.tar.gz
expat-2.2.6.tar.bz2 Expat
gcc-10-2021-20210519-19A74-src.tar.gz GPL 3+
gcc-interface-10-2021-20210519-19A75-src.tar.gz
gdb-10-2021-20210518-19C88-src.tar.gz GPL 3+
gmp-6.1.2.tar.bz2 LGPL 3+
gnat-2021-20210519-19A70-src.tar.gz
gnatcoll-bindings-2021-20210518-19B15-src.tar.gz
gnatcoll-core-2021-20210518-19ADF-src.tar.gz
gnatmem-2021-20210518-19F7B-src.tar.gz
gnatsymbolize-2021-20210518-19D3B-src.tar.gz
gprbuild-2021-20210519-19A34-src.tar.gz
gps-2021-20210701-19B6B-src.tar.gz
langkit-2021-20210518-19B8E-src.tar.gz
libadalang-2021-20210518-199BE-src.tar.gz
libadalang-tools-2021-20210519-19A69-src.tar.gz
libantlr3c-3.4.tar.gz Modified BSD
libffi-3.2.1-patched.tar.gz Expat
libiconv-1.15.tar.gz LGPL 3+
mpc-1.0.3.tar.gz LGPL 3+
mpfr-3.1.5.tar.bz2 LGPL 3+
opam-ocaml-4-11-1-2021-20210518-19D84-src.tar.gz LGPL 3, It's a package manager for OCaml, so its repository may need to be reviewed as well.
spark-2021-2021-20210519-19A1A-src.tar.gz
spawn-2021-20210701-19A43-src.tar.gz
sqlite-autoconf-3270200.tar.gz
vss-2021-20210701-198AA-src.tar.gz
why3-2021-20210519-19ADF-src.tar.gz
xmlada-2021-20210518-19D50-src.tar.gz LGPL 2.1
xz-5.2.2.tar.gz GPL 2+, LGPL 2.1+
z3-2021-20210518-1A000-src.tar.gz Expat
zlib-1.2.6.tar.gz Zlib
GNU/Linux i686
GNU/Linux x86_64 RISCV ELF 32bit
GNU/Linux x86_64 RISCV ELF 64bit
GNU/Linux x86_64

References

  1. libtool is part of the autotools and it abstracts linking to make it work on a lot of operating systems. The status of the programming languages other than C and C++ can be found here: https://www.gnu.org/software/libtool/manual/libtool.html#Tags
  2. Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.
  3. Shared libraries systems enable way better performances on older computers as it uses way less RAM.
  4. 4.04.1 Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.
  5. 5.05.1 Having a standard or something similar to refer to enables people to write code that can still be used without requiring too much maintenance to adapt to newer compiler versions.
  6. 6.006.016.026.036.046.056.066.076.086.096.106.116.126.13 https://gcc.gnu.org/onlinedocs/gcc-15.1.0/gcc/G_002b_002b-and-GCC.html
  7. At the FOSDEM 2023 I was told at the Ada table that it worked fine on microcontrollers with 16k of RAM, and that it was widely used in microcontrollers. The table also had several microcontroller boards.
  8. The ISO standard specification can be found here. It is provided by the ARG (Ada Rapporteur Group) free of charge and the license allows for modifications and reproductions while requiring the license to be reproduced.
  9. Ideally the specifications should be available under free licenses.
  10. https://clang.llvm.org/features.html#gcccompat
  11. https://www.gnu.org/software/gnu-c-manual/
  12. While automake isn't supported, it's still possible to use it if we add a rule to handle .go files in our Makefile.am. For some reasons we then also need to add link rules for every program/library we create. I've created a autotools-go-hello-world project to show how to use autoconf and automake together with go. Note that I didn't look if that scaled well or the limitations in more complex projects. For instance I'm unsure how to handle shared libraries, how to link to dependencies, etc.
  13. The last GCC version supporting GCJ seems to be 6.5.0: https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/G_002b_002b-and-GCC.html#G_002b_002b-and-GCC
  14. https://gcc.gnu.org/onlinedocs/gcc-15.1.0/gcc/Standards.html#Modula-2-language
  15. See one of the two talks on rust in GNU cauldron 2022.
  16. From Wikipedia article on perl: "No written specification or standard for the Perl language exists for Perl versions through Perl 5"
  17. Autotools contains *a lot* of information and/or workarounds on how to support most Posix-like systems, including less well known systems. See the [1] and automake manuals for more details.
  18. https://autotools.info/libtool/windows.html
  19. 19.019.1 https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down
  20. https://guix.gnu.org/en/blog/2024/adding-a-fully-bootstrapped-mono/
  21. 21.021.1 https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/haskell.scm?h=v1.4.0#n363
  22. 22.022.1 In gnu/packages/java.scm icedtea-7 depends on jamvm which depends on jamvm-1-bootstrap which is built from source. The source bootstrap is not architecture specific.
  23. 23.023.1 Both the Guix package and the official build instructions use the build.sh script that compiles code (in the c_code directory) that has been generated with the nim compiler.
  24. 24.0024.0124.0224.0324.0424.0524.0624.0724.0824.0924.10 See supported-systems in the rust 1.54 package definition
  25. 25.025.1 The vala source code contains C files generated from vala source code that is also present in that source code. Since the Guix package and the README.md included in the vala source code require a C compiler but not a vala compiler to compile vala, the C code is then used to build it.
  26. https://guix.gnu.org/en/blog/2026/gnu-guix-1.5.0-released/
  27. https://m.jakstys.lt/2024/zig-reproduced-without-binaries/
  28. 28.028.128.2 Before it was broken due to the removal of rubygems, but it now works agains thanks to libre/ruby.
  29. 29.029.129.229.3 mono-mcs is architecture independent. It depends on packages like mono-runtime which works on amd64, arm64, armhf, ppc64el.
  30. This release also had additional hosts like Windows and darwin, and additional targets too like "Raspberry Pi 2 Linux (32bits)" but I didn't look into them.
  31. Here we used GNU/Linux x86_64 host and target source code for the review. I hope that all the host/target combination have the same source but I didn't check.
  32. So far I used 'guix package --show=<package-name>' to find the license. I also didn't check license compatibilities.

This page was a featured resource in September 2025.