HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
torvalds
linux
C2010–2026
torvalds / linux

linux

Linux kernel source tree

742Distinct people
940Mentions
5Explicit recommenders
255.5KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Linux kernel source tree

GitHub

Where it is used

  • Ubuntu — Ubuntu uses the Linux kernel at the core of the operating system to manage and control hardware resources like I/O, memory, and CPU. Source
  • Android — Android uses the upstream Linux LTS kernel as the base of its Android kernel. Google then adds Android-specific patches to produce Android Common Kernels. Source
  • 1 more documented example

What people are saying

For critical applications, I for one would like to know the story behind a commit, preferably in the commit itself and not a reference to an external system like idk, Jira. My…

Cthulhu_ used a recommendation phrase. 5 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 2:59:53 AM UTC.

GitHub Down Again? direct repository linkCritical

Users report that GitHub's official status page inaccurately claims all systems are operational while widespread 504 gateway timeouts and download failures disrupt CI/CD pipelines and software distribution. The conversation highlights significant frustration with the platform's reliability and transparency, leading to debates about migrating to self-hosted or alternative services like Codeberg.

57 readable replies · Supporting reply 1 · Supporting reply 2 · Supporting reply 3 · Supporting reply 4

Mentions over time

HN mentions by year940 dated mentions

Observed mentions: 2010-07-15 18:39:05 UTC to 2026-10-29 13:46:22 UTC.

02550751002010-01-01 00:00:00 UTC to 2011-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20102011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 13 mentions; 3 submissions, 10 comments2012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 24 mentions; 2 submissions, 22 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 23 mentions; 5 submissions, 18 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 31 mentions; 7 submissions, 24 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 42 mentions; 4 submissions, 38 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 55 mentions; 9 submissions, 46 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 72 mentions; 8 submissions, 64 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 57 mentions; 8 submissions, 49 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 66 mentions; 6 submissions, 60 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 80 mentions; 6 submissions, 74 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 91 mentions; 8 submissions, 83 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 104 mentions; 8 submissions, 96 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 76 mentions; 3 submissions, 73 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 76 mentions; 6 submissions, 70 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 72 mentions; 7 submissions, 65 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 57 mentions; 8 submissions, 49 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20102010-01-01 00:00:00 UTC2011-01-01 00:00:00 UTC101
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC13310
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC24222
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC23518
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC31724
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC42438
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC55946
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC72864
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC57849
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC66660
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC80674
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC91883
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC104896
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC76373
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC76670
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC72765
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC57849

What Hacker News says

72 sources
The `unsafe` block was present because `List::remove` is marked `unsafe` [0]: /// Removes the provided item from this list and returns it. /// /// This returns `None` if the item is not in the list. (Note that by the safety requirements, /// this means that the item is not in any list.) /// /// # Safety /// /// `item` must not be in a different linked list (with the same id). pub unsafe fn remove(&mut self, item: &T) -> Option<ListArc<T, ID>> { I think it'd be tricky at best to make this particular API safe since doing so requires reasoning across arbitrary other List instances. At the very least I don't think locks would help here, since temporary exclusive access to a list won't stop you from adding the same element to multiple lists. [0]: https://github.com/torvalds/linux/blob/3e0ae02ba831da2b70790.
Read the rest
In Linux Kernel Rust Code Sees Its First CVE Vulnerability
Ah, I see that interpretation now that you spelled it out for me. Here's what `List::remove` says on its safety requirements [0]: /// Removes the provided item from this list and returns it. /// /// This returns `None` if the item is not in the list. (Note that by the safety requirements, /// this means that the item is not in any list.) /// /// # Safety /// /// `item` must not be in a different linked list (with the same id). pub unsafe fn remove(&mut self, item: &T) -> Option<ListArc<T, ID>> { At least if I'm understanding things correctly, I don't think that that invariant is something that locks can protect in general. I can't say I'm familiar enough with the code to say whether some other code organization would have eliminated the need for the unsafe block in this specific case. [0]: https://gith
Read the rest
In Linux Kernel Rust Code Sees Its First CVE Vulnerability
Direct link to the mailing list entry at [0]. The fix for 6.19-rc1 is commit 3e0ae02ba831 [1]. The patch is pretty small (added some extra context since the function it's from is short): pub(crate) fn release(&self) { let mut guard = self.owner.inner.lock(); while let Some(work) = self.inner.access_mut(&mut guard).oneway_todo.pop_front() { drop(guard); work.into_arc().cancel(); guard = self.owner.inner.lock(); } - let death_list = core::mem::take(&mut self.inner.access_mut(&mut guard).death_list); - drop(guard); - for death in death_list { + while let Some(death) = self.inner.access_mut(&mut guard).death_list.pop_front() { + drop(guard); death.into_arc().set_dead(); +
Read the rest
guard = self.owner.inner.lock(); } } And here is the unsafe block mentioned in the commit message with some more context [3]: fn set_cleared(self: &DArc<Self>, abort: bool) -> bool { // <snip> // Remove death notification from node. if needs_removal { let mut owner_inner = self.node.owner.inner.lock(); let node_inner = self.node.inner.access_mut(&mut owner_inner); // SAFETY: A `NodeDeath` is never inserted into the death list of any node other than // its owner, so it is either in this death list or in no death list. unsafe { node_inner.death_list.remove(self) }; } needs_queueing } [0]: https://lore.kernel.org/linux-cve-announce/2025121614-CVE-20... [1]: https://github.com/torvalds/linux/commit/3e0ae02ba831da2b707... [2]: https://github.com/torvalds/linux/blob/3e0ae02ba831da2b70790... [3]: https://github.com/torvalds/linux/blob/3e0ae02ba831da2b70790...
In Linux Kernel Rust Code Sees Its First CVE Vulnerability
I don't think unsafe Rust has gotten any easier to write, but I'd also be surprised if there was much unsafe except in the low-level stuff (hard to write Vec without unsafe), and to interface with C which is actually not hard to write. Mostly Rust has been used for drivers so far. Here's the first Rust driver I found: https://github.com/torvalds/linux/blob/2137cb863b80187103151... It has one trivial use of `unsafe` - to support Send & Sync for a type - and that is apparently temporary. Everything else uses safe APIs.
In Rust in the kernel is no longer experimental
I really hate the anti-RAII sentiments and arguments. I remember the Zig community lead going off about RAII before and making claims like "linux would never do this" (https://github.com/torvalds/linux/blob/master/include/linux/...). There are bad cases of RAII APIs for sure, but it's not all bad. Andrew posted himself a while back about feeling bad for go devs who never get to debug by seeing 0xaa memory segments, and sure I get it, but you can't make over-extended claims about non-initialization when you're implicitly initializing with the magic value, that's a bit of a false equivalence - and sure, maybe you don't always want a zero scrub instead, I'm not sold on Go's mantra of making zero values always be useful, I've seen really bad code come as a result of people doing backflips to try to make that true - a constructor API is a bett
Read the rest
er pattern as soon as there's a challenge, the "rule" only fits when it's easy, don't force it. Back to RAII though, or what people think of when they hear RAII. Scope based or automatic cleanup is good. I hate working with Go's mutex's in complex programs after spending life in the better world. People make mistakes and people get clever and the outcome is almost always bad in the long run - bugs that "should never get written/shipped" do come up, and it's awful. I think Zig's errdefer is a cool extension on the defer pattern, but defer patterns are strictly worse than scope based automation for key tasks. I do buy an argument that sometimes you want to deviate from scope based controls, and primitives offering both is reasonable, but the default case for a ton of code should be optimized for avoiding human effort and human error. In the end I feel similarly about allocation. I appreciate Zig trying to push for a different world, and that's an extremely valuable experiment to be doing. I've fought allocation in Go programs (and Java, etc), and had fights with C++ that was "accidentally" churning too much (classic hashmap string spam, hi ninja, hi GN), but I don't feel like the right trade-off anywhere is "always do all the legwork" vs. "never do all the legwork". I wish Rust was closer to the optimal path, and it's decently ergonomic a lot of the time, but when you really want control I sometimes want something more like Zig. When I spend too much time in Zig I get a bit bored of the ceremony too. I feel like the next innovation we need is some sanity around the real useful value that is global and thread state. Far too much toxic hot air is spilled over these, and there are bad outcomes from mis/overuse, but innovation could spend far more time on _sanely implicit context_ that reduces programmer effort without being excessively hidden, and allowing for local specialization that is easy and obvious. I imagine it looks somewhere between the rust and zig solutions, but I don't know exactly where it should land. It's a horrible set of layer violations that the purists don't like, because we base a lot of ABI decisions on history, but I'd still like to see more work here. So RAII isn't the big evil monster, and we need to stop talking about RAII, globals, etc, in these ways. We need to evaluate what's good, what's bad, and try out new arrangements maximize good and minimize bad.
In Thoughts on Go vs. Rust vs. Zig
I read the article as saying that there's no official C library but unofficial ones do exist. Quote below, emphasis mine. > A official c library doesn’t exist yet unfortunately, but there’s several out there you can try. Also, it looks like there is more than zero support for C programs calling Landlock APIs. Even without a 3rd-party library you're not just calling syscall() with a magic number: https://docs.kernel.org/userspace-api/landlock.html https://github.com/torvalds/linux/blob/6bda50f4/include/uapi... https://github.com/torvalds/linux/blob/6bda50f4/include/linu...
In Landlock-Ing Linux
It is strange, cursory digging for an explanation was a little more complex than I bargained for... https://github.com/torvalds/linux/blob/v6.17/fs/binfmt_scrip... I think it makes it to calling open_exec but there's a test for BINPRM_FLAGS_PATH_INACCESSIBLE, which doesn't seem relevant since 'bash' isn't like '/dev/fd/<fd>/..', but does provoke an ENOENT. https://github.com/torvalds/linux/blob/v6.17/fs/exec.c#L1445 Maybe someone else can explain it, I'd enjoy the details, and ran out of steam.
In A surprise with how '#!' handles its program argument in practice
Em.. I’m quite nitpicky and want to do the opposite of “thought-terminating”. I’m for encouraging best practice, but most things do have its place. I present to this court two examples:“premature optimisation is root of all evil” and “goto statement considered harmful”. Both well accepted as things should be avoided for good reasons (incl. but not limited to, preserving sanity of coworkers) But both definitely “have its place”. First one’s place is legitimized (with nuance) by author himself in second part of same sentence. The latter one (goto) is routinely used by linux devs (random example: https://github.com/torvalds/linux/blob/master/fs/ext4/balloc...) > we just stop using it. We minimise/restrict the usage.
In When did people favor composition over inheritance?

Showing the 15 most recent of 72 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.