clarify the purpose of this project
[nyanglibc.git] / README
blob8e81289f61c80cd69832976e9e7fec89cad5bb1f
1 You should not use the glibc anymore but the other libcs.
2 Stick to GNU licences, not gnu software.
4 This is a _partial_ bootstrap of glibc (2.33) for x86_64 due to gnu failing its
5 mission, hard. With gcc, it is becoming the worst "corporate financed academic"
6 open source software out there and this is very disappointing and toxic.
8 Its goal is to provide an old "emergency"/bootstrap glibc you can quick and
9 dirty fix in assembly (big structural fixes will be probably unreasonable to
10 implement) and build with raw binutils. It is still non-pertinently expensive
11 though. For instance it will allow you to build ELF userland drivers
12 to be pulled in container-ized recent glibc runtimes (new runtimes will load
13 binaries linked with an old runtime).
15 Upstream requires some gnu only tools (and recently even a python interpreter),
16 the worst being gcc though. The gnu digital jail is enforced via grotesque, 
17 non-pertinent and absurd complexity and size, we do now presume this is due
18 to malice and not incompetence:
19         - Many glibc libs must be statically loaded due to the ELF static TLS
20           flag. This can still be tolerable, but why this is not already fixed?
21           And it makes libdl-ing properly symbols error prone (you miss some
22           symbols).
23         - Statically linked glibc objects into binaries expect specific
24           symbol versions in the shared parts of the glibc.
25         - Manic abuse of gnu symbol versioning.
26         - gnu jailed SDK.
28 BUILD AND INSTALL:
29 * Edit make_x86_64_libs.sh, adapt the configuration to your system, create a
30 build directory, change the current directory to this build directory, run
31 make_x86_64_libs.sh from there.
32 * Edit install_runtime.sh, adapt the configuration to your system, change the
33 current directory to the previous build directory, run install_runtime.sh as a
34 user with the appropriate access rights (usually root for a system install
35 for all users).
36 * Edit install_dev.sh, adapt the configuration to your system, change the
37 current directory to the previous build directory, run install_dev.sh as a
38 user with the appropriate access rights (usually root for a system install
39 for all users).
40 * WARNING: linux headers are _NOT_ included
41 * elf loader search directories: only the "system" ones, and those in
42 LD_LIBRARY_PATH (no cache). Use "ld-linux-x86-64.so.2 --list" to know.
44 * timezone: default to UTC. If you want a specific one, use a timezone
45 specification encoded in the TZ environment variable independent of any data
46 files (search the web). We will try to update properly the "unix time"
47 to calendar date mapping data though.
49 * locales: only internals C and POSIX, with the devuan stolen C.utf8 as a locale
50 archive file. Don't use libc locales, this is sort of a mess and kind of
51 broken. The C.utf8 "source" is there in case of.
53 Should be a mostly assembly fork to remove gcc dependency and the original gcc
54 code/verbose assembly is available now as code "documentation"/"specification" 
55 and not as "real" code anymore.
57 The source from the glibc 2.33 is not included for obvious repository size
58 reasons. Most build products (object files, shipped elf/data files) are not 
59 included for the same reasons.
61 The toolchain used to generate the bootstrap x86_64 code for this fork was gcc
62 7.3.0 with binutils 2.30.
64 Goal: keep as long as reasonably possible, _partial_ binary compatibility for
65 binary only (video games mostly)/heavy corporate open source applications.
66 Lean and non-corporate/(non-academic corporated financed) open source can use
67 alternative libcs which are non gcc locked and with a reasonable SDK.
69 Due to unfair financing, it may be not reasonably possible.