glibc VS linux

Compare glibc vs linux and see what are their differences.

glibc

Unofficial mirror of sourceware glibc repository. Updated daily. (by bminor)

linux

Linux kernel source tree (by torvalds)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
glibc linux
45 981
1,213 170,551
3.2% -
9.8 10.0
9 days ago 5 days ago
C C
GNU General Public License v3.0 or later GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

glibc

Posts with mentions or reviews of glibc. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-01-09.
  • I cut GTA Online loading times by 70% (2021)
    3 projects | news.ycombinator.com | 9 Jan 2024
  • Cray-1 performance vs. modern CPUs
    4 projects | news.ycombinator.com | 25 Dec 2023
    I wonder if you’re using a different definition of ‘vectorized’ from the one I would use. For example glibc provides a vectorized strlen. Here is the sse version: https://github.com/bminor/glibc/blob/master/sysdeps/x86_64/m...

    It’s pretty simple to imagine how to write an unoptimized version: read a vector from the start of the string, compare it to 0, convert that to a bitvector, test for equal to zero, then loop or clz and finish.

    I would call this vectorized because it operates on 16 bytes (sse) at a time.

    There are a few issues:

    1. You’re still spending a lot of time in the scalar code checking loop conditions.

    2. You’re doing unaligned reads which are slower on old processors

    3. You may read across a cache line forcing you to pull a second line into cache even if the string ends before then.

    4. You may read across a page boundary which could cause a segfault if the next page is not accessible

    So the fixes are to do 64-byte (ie cache line) aligned accesses which also means page-aligned (so you won’t read from a page until you know the string doesn’t end in the previous page). That deals with alignment problems. You read four vector registers at a time but this doesn’t really cost much more if the string is shorter as it all comes from one cache line. Another trick in the linked code is that it first finds the cache line by reading the first 16 bytes then merging in the next 3 groups with unsigned-min, so it only requires one test against a zero vector instead of 4. Then it finds the zero in the cache line. You need to do a bit of work in the first iteration to become aligned. With AVX, you can use mask registers on reads to handle that first step instead.

  • Setenv Is Not Thread Safe and C Doesn't Want to Fix It
    6 projects | news.ycombinator.com | 19 Nov 2023
    That was also my thought. To my knowledge `/etc/localtime` is the creation of Arthur David Olson, the founder of the tz database (now maintained by IANA), but his code never read `/etc/localtime` multiple times unless `TZ` environment variable was changed. Tzcode made into glibc but Ulrich Drepper changed it to not cache `/etc/localtime` when `TZ` is unset [1]; I wasn't able to locate the exact rationale, given that the commit was very ancient (1996-12) and no mailing list archive is available for this time period.

    [1] https://github.com/bminor/glibc/commit/68dbb3a69e78e24a778c6...

  • CTF Writeup: Abusing select() to factor RSA
    2 projects | news.ycombinator.com | 11 Nov 2023
    That's not really what the problem is. The actual code is fine.

    The issue is that the definition of `fd_set` has a constant size [1]. If you allocate the memory yourself, the select() system call will work with as many file descriptors as you care to pass to it. You can see that both glibc [2] and the kernel [3] support arbitrarily large arrays.

    [1] https://github.com/bminor/glibc/blob/master/misc/sys/select....

    [2] https://github.com/bminor/glibc/blob/master/sysdeps/unix/sys...

    [3] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...

  • How are threads created in Linux x86_64
    3 projects | dev.to | 22 Sep 2023
    The source code for that is here.
  • Using Uninitialized Memory for Fun and Profit (2008)
    3 projects | news.ycombinator.com | 3 Sep 2023
    Expanding macro gives three GCC function attributes [2]: `__attribute__ ((malloc))`, `__attribute__ ((alloc_size(1)))` and `__attribute__ ((warn_unused_result))`. They are required for GCC (and others recognizing them) to actually ensure that they behave as the standard dictates. Your own malloc-like functions won't be treated same unless you give similar attributes.

    [1] https://github.com/bminor/glibc/blob/807690610916df8aef17cd1...

    [2] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attribute...

  • “csinc”, the AArch64 instruction you didn’t know you wanted
    2 projects | news.ycombinator.com | 7 Jun 2023
    IFunc relocations is what enables glibc to dynamically choose the best memcpy routine to use at runtime based on the CPU.

    see https://github.com/bminor/glibc/blob/glibc-2.31/sysdeps/x86_...

  • memmove() implementation in strictly conforming C -- possible?
    2 projects | /r/C_Programming | 27 Apr 2023
    memmove can be very well implemented in pure C, libc implementations usually have a "generic" (meaning, architecture independent) fallback. Here is musl generic implementation and its x86-64 assembly implementation. For glibc, implementation is a bit more complex, having multiple architectures implemented, but you could find a generic implementation with these two files: memmove.c and generic/memcopy.h.
  • Fedora 38 LLVM vs. Team Fortress 2
    6 projects | news.ycombinator.com | 24 Apr 2023
    Yeah, looks like the Q_strcat(pszContentPath, "/"); is invalid, as glibc has only allocated exactly enough to fit the path in the buffer returned by realpath().

    Interestingly, the open group spec says that a null argument to realpath is "Implementation defined" [0]

    And the linux (glibc) man pages say it allocates a buffer "Up to PATH_MAX" [1]

    I guess "strlen(path)" is "Up to PATH_MAX", but the man page seems unclear - you could read that as implying the buffer is always allocated to PATH_MAX size, but that's not what seems to be happening, just effectively calling strdup() [2]. I have no idea how to feed back to the linux man pages, but might be worth clarifying there.

    [0] https://pubs.opengroup.org/onlinepubs/009696799/functions/re...

    [1] https://linux.die.net/man/3/realpath

    [2] https://github.com/bminor/glibc/blob/0b9d2d4a76508fdcbd9f421...

  • Method implementations
    2 projects | /r/cpp_questions | 15 Feb 2023
    For the actual sources you will have to look at one of the mirrors of the C standard library, such as https://github.com/bminor/glibc/tree/master/sysdeps/ieee754/dbl-64

linux

Posts with mentions or reviews of linux. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-30.
  • The File Filesystem
    8 projects | news.ycombinator.com | 30 Apr 2024
    FFS predates FreeBSD and is in some capacity supported by all 3 major BSDs. I'm fairly confident that Linux actually supports it through the ufs driver ( https://github.com/torvalds/linux/tree/master/fs/ufs ); whether the use of different names in different places makes it better or worse is an exercise for the reader.
  • Linus Torvalds adds arbitrary tabs to kernel code
    3 projects | news.ycombinator.com | 17 Apr 2024
    These are a bit easier to see what's going on:

    https://github.com/torvalds/linux/commit/d5cf50dafc9dd5faa1e...

    https://github.com/torvalds/linux/blob/d5cf50dafc9dd5faa1e61...

    Unfortunately Github doesn't have a way to render symbols for whitespace, but you can tell by selecting the spaces that the previous version had leading tabs. Linus changed it so that the tokens `default` and the number e.g. `12` are also separated by a tab. This is tricky, because the token "default" is seven characters, it will always give this added tab a width of 1 char which makes it always layout the same as if it were a space no matter if you use tab widths of 1, 2, 4, or 8.

  • Show HN: Running TempleOS in user space without virtualization
    3 projects | news.ycombinator.com | 11 Apr 2024
  • PfSense Software Embraces Change: A Strategic Migration to the Linux Kernel
    1 project | news.ycombinator.com | 4 Apr 2024
    There was also a Gentoo effort to run atop FreeBSD[0]. The challenge of course is that afaik none of the BSD kernel ABIs are considered stable. The stable interface is the BSD libc. That said, with binfmt_misc, I don't see a reason you couldn't just run (at least some) FreeBSD binaries on Linux with a thin syscall translation layer (rather something like qemu-system) and then your layer hooked via binfmt_misc. I'm not aware of anyone who has done this for FreeBSD, but prior efforts existed as alternate binfmts for SysVr4/5 ELF binaries[2]. Either way would take some elbow grease, but you *might* even be able just reuse binfmt_elf and just have a new interpreter for FreeBSD elf.

    [0] https://wiki.gentoo.org/wiki/Gentoo_FreeBSD

    [1] https://docs.kernel.org/admin-guide/binfmt-misc.html

    [2] https://github.com/torvalds/linux/blob/master/fs/binfmt_elf....

  • Improvements to static analysis in GCC 14
    1 project | news.ycombinator.com | 3 Apr 2024
    > The original less-than check was deemed incorrect

    It was only deemed incorrect because of an information leak. Not because it's a valid use-case for user space to copy smaller portions of *hwrpb into user space. https://github.com/torvalds/linux/commit/21c5977a836e399fc71...

  • Linus Torvalds accepts a merge commit to the Linux kernel
    2 projects | news.ycombinator.com | 1 Apr 2024
  • TinyMCE (also) moving from MIT to GPL
    3 projects | news.ycombinator.com | 27 Mar 2024
    Correct. And the combined work needs to carry the MIT license text and copyright attributions for the MIT software authors. With binary distribution it must also be overt, not hidden in some source code drop, but directly accompanying the binary.

    Many people who talk about relicensing never credit the MIT developers or distribute the MIT license text. "Because it's GPL now."

    I don't think that you believe that, but many developers do.

    Some don't see the need for source code scans for Open Source compliance, because the license.txt says GPL, so it's GPL. Prime example is the Linux kernel. There is code under different licenses in there, but people don't even read https://github.com/torvalds/linux/blob/master/COPYING till the end ("In addition, other licenses may also apply.") and conclude it's simply GPL 2 and nothing else.

    Also be aware that sublicensing is not the same as relicensing.

  • Linus Torvalds is looking for a more modern GUI editor
    1 project | news.ycombinator.com | 28 Feb 2024
    > Does he have something against it?

    He notoriously hates GNU Emacs, yes.

    https://marc.info/?m=122955159617722

    https://github.com/torvalds/linux/blob/master/Documentation/...

  • The Linux Kernel Prepares for Rust 1.77 Upgrade
    9 projects | news.ycombinator.com | 18 Feb 2024
    So If we would only count code and not comments, it is only 9489 LoC Rust. Which would be about 0.03% and if we take all lines and not only LoC it would be around 0.05%

    [0] https://github.com/XAMPPRocky/tokei

    [1] https://github.com/torvalds/linux/commit/b401b621758e46812da...

  • Proposed Windows NT sync driver brings big Wine/Proton performance improvements
    2 projects | news.ycombinator.com | 25 Jan 2024
    AIUI fsync is built on futex_waitv which has been upstreamed. So this has to be more than that.

    https://github.com/torvalds/linux/commit/a0eb2da92b715d0c97b...

What are some alternatives?

When comparing glibc and linux you can also consider the following projects:

musl - Unofficial mirror of etalabs musl repository. Updated daily.

zen-kernel - Zen Patched Kernel Sources

cosmopolitan - build-once run-anywhere c library

DS4Windows - Like those other ds4tools, but sexier

dns - DNS library in Go

winapps - Run Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration.

0.30000000000000004 - Floating Point Math Examples

Open and cheap DIY IP-KVM based on Raspberry Pi - Open and inexpensive DIY IP-KVM based on Raspberry Pi

json-c - https://github.com/json-c/json-c is the official code repository for json-c. See the wiki for release tarballs for download. API docs at http://json-c.github.io/json-c/

serenity - The Serenity Operating System 🐞

degasolv - Democratize dependency management.

DsHidMini - Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers