I follow the philosophy of “let’s get to the catastrophe so we can move on”. This is one of those times. I truly hope the entire world switches to Chrome, experiences the downsides, and decides to finally do something about it. And the fastest way to get there is to tell everyone to use Chrome. So I do.
I’m struggling to see the logic here. What makes you convinced there is going to be a breaking point? To the extent anything in technology can be said to have a history, we have a long history of convincing ourselves that everything has to be the more or less the way it is now.
I think the bigger question is whether most people would perceive any tangible downsides at all. If, as a user, I don’t view “Google uses my browsing history to do ad targeting” as a form of harm to me (and outside techie circles, it seems like a lot of people don’t) then what other downsides would cause me to want to take action?
It’s annoying to deal with some type of users that write demands, but worry not, we do want to implement line wrap, it’s just painfully hard to do so. Also I prefer to implement things out of spite, rather than not implementing them.
While I love soft-wrapping as much as the next person, what MD dialect doesn’t accept that the logical paragraph is separated by a newline? I.e. hard line breaks are fine. In fact, in CommonMark at least, you have to explicitly denote one with double trailing spaces.
Now, if you’re editing gemtext, you really want softwrap.
Short answer: I don’t care about what is possible in Markdown, I only care that my existing Markdown files were written with soft-wrapping, and I don’t feel like converting them. I can’t easily read my existing writing.
Also, that strategy quickly goes out of the window when you use a different font and/or size. Your future you will be happier with soft-wrapping, so will other people with other preferences and needs. Using newline for each sentence somewhat makes sense though as commits/diffs become slightly more meaningful.
I was on Team HardWrap, mostly because it’s so damn cool in Emacs to hit M-q, but now I just enable visual-line-mode and am happy. Supporting both is editor table stakes, though.
Red Hat: those who use open source code and don’t contribute back are “a real threat to open source companies everywhere”
I call them: users.
I fight for the users.
How are you going to get people to contribute back if they aren’t first users? Sure not everyone will, but if you don’t let them be users first no one will
Well, they were freeloading off your work, now you are both even. And everyone else has lost something.
My two cents: I’ve seen a lot of people say that this is a perfectly predictable move by Red Hat, that in order to turn a profit companies will want to capture the value of their work. Sadly, this is textbook enshittification: a healthy ecosystem doesn’t let one company capture all of the value of a community, including a community built around open source software. The value of the community comes in part from letting other people and businesses enjoy some of the value that they are also contributing. Capturing more / too much of the value risks destroying the community, and if that happens, sadly in the end not only will Red Hat no longer be able to capture that value, the community will also lose the value that it contributed when the business+community dies or is killed by the corporation.
I don’t use RHEL or the now threatened clones, but… Seeing this power grab has made me nervous about all of the other stuff Red Hat is responsible for, directly or indirectly, including my primary computer’s current OS, Fedora, and the configuration management software behind all my web infrastructure, Ansible.
It really feels like the pace of enshittification has been accelerating lately, with Twitter, Reddit, and other entities I’ve relied on for years suddenly becoming so bad so quickly that it’s become intolerable for me.
Red Hat: those who use open source code and don’t contribute back are “a real threat to open source companies everywhere” I call them: users. I fight for the users.
Now let’s look at the actual wording in the blog post:
Simply rebuilding code, without adding value or changing it in any way, represents a real threat to open source companies everywhere.
I don’t particularly agree with this statement, but it’s a quite different one from what Jeff Geerling is making it out to be. Sadly, a certain section of critics always resort to such tactics whenever an OSS company does something they don’t like.
this is textbook enshittification: a healthy ecosystem doesn’t let one company capture all of the value of a community, including a community built around open source software.
This is a very confused mumbo-jumbo that sounds vaguely economic, but it’s not really. It takes five seconds of thought to realize there are other significant Linux distros, and Red Hat is nowhere near capturing the entire community.
It takes five seconds of thought to realize there are other significant Linux distros, and Red Hat is nowhere near capturing the entire community.
How many of those distros managed to avoid adopting things that RedHat pushed on the ecosystem that were controlled by RedHat, such as PulseAudio and systemd?
Yeah… I’m no RH or RHEL fan but GNOME, PulseAudio, PipeWire, a number of Wayland-adjacent projects, including leaning-in on Firefox’s Wayland support… There’s a lot of things RH touches that I appreciate. I also worked at a large tech company and realize that the folks making the decisions about RHEL source availability are probably not the people spearheading these efforts, or even the ones setting technical direction.
In other words–what you’re asking is, How many of those distros managed to avoid the free software and labour that Red Hat funded for them and the rest of the Linux community? Also, give it a rest about systemd already. It’s over and it won for a technical reason. It’s not some huge conspiracy theory.
You’re the one theorizing a conspiracy wherein Red Hat investors and managers act altruistically, against the economic incentives they would have to follow if they didn’t conspire.
What else could you mean by saying Red Hat does things “for them and the rest of the Linux community”?
So let me get this straight, according to you, I am saying that Red Hat (which has been an open source company from day one) is engaged in a conspiracy to do open source work. Did I understand right?
I am asking how else we should interpret “for them and the rest of the Linux community,” other than the idea that they acted altruistically, which would require a conspiracy.
Or DRI. The Direct Rendering Infrastructure and Direct Rendering Manager (DRI/DRM) are a joint effort from a bunch of contractors, including Red Hat. It was an open secret that kernel modesetting (KMS) was pushed in order to have a faster prettier boot screen for some unknown client of Red Hat; I remember standing next to the DRI/DRM maintainer while Linus yelled at him about this.
I have a lot of sympathy with them. FreeBSD managed not to adopt these things but ended up having to do a lot of work. When a single company is pushing a vertically integrated solution and has enough developers to be able to upstream changes that add it as a dependency across a load of packages, it’s very hard to keep things working if you don’t adopt their solution.
My memory could be fuzzy, but I recall a lot of capitulation and even mockery of folks’ concerns in and by those distros. That said, I suppose you’ve got a point. :)
My two cents: I’ve seen a lot of people say that this is a perfectly predictable move by Red Hat, that in order to turn a profit companies will want to capture the value of their work. Sadly, this is textbook enshittification: a healthy ecosystem doesn’t let one company capture all of the value of a community, including a community built around open source software. The value of the community comes in part from letting other people and businesses enjoy some of the value that they are also contributing. Capturing more / too much of the value risks destroying the community, and if that happens, sadly in the end not only will Red Hat no longer be able to capture that value, the community will also lose the value that it contributed when the business+community dies or is killed by the corporation.
I don’t think you’re actually saying what amount of value Red Hat was capturing, how much more it’s capturing now, and why you think the lower amount is correct. Calling it “enshittification” does not make an argument.
How are you going to get people to contribute back if they aren’t first users? Sure not everyone will, but if you don’t let them be users first no one will
From the original article, emphasis mine:
We also provide no-cost Red Hat Developer subscriptions and Red Hat Enterprise Linux (RHEL) for Open Source Infrastructure. The developer subscription provides no-cost RHEL to developers and enables usage for up to 16 systems, again, at no-cost. This can be used by individuals for their own work and by RHEL customers for the work of their employees. RHEL for Open Source Infrastructure is intended to give open source projects (whether or not they’re affiliated with Red Hat in any way) access to no-cost RHEL for their infrastructure and development needs.
16 machines is a pretty generous free license, definitely not a barrier to entry.
The barrier to entry is that automating the fetching of one of those licenses for a CI/CD system, then making sure you don’t run more than 16 of them in parallel (docker containers count as a license BTW, so it’s not even full VM’s). Then making sure you check that license back in.
On top of that the licensing system is fickle, and sometimes just doesn’t license a system or takes a while to do so, so now your CI/CD pipeline is sitting idle while RHEL sorts out its entitlement and gives you a certificate for use with their repositories to fetch the packages you need to run your compile/integration testing…
Lastly you are required to renew the license on a yearly basis and there is no automated way to do that, so every year your CI/CD pipeline will need to get updated with new secrets because it stops working.
None of those limitations existed with CentOS. I could easily grab the RPM’s I needed from a mirror, I could easily cache those packages (legally) and install them on a system without first having to register it as licensed. I didn’t have to figure out how to distribute the right license key for registering the system with RHEL in the first place and keeping it safe…
It’s not something that can’t be overcome and solved, it’s just an additional hurdle that you have to jump over, and yet one more thing that can go wrong/has to be debugged/tested/validated.
It’s not something that can’t be overcome and solved, it’s just an additional hurdle that you have to jump over, and yet one more thing that can go wrong/has to be debugged/tested/validated.
which is no barrier to a big company who would blow past the 16 system limit, but is a barrier instantly for small one-man teams.
I’d be interested in the backstory here: was Red Hat ever profitable before these changes? Did something stop them from turning a profit when they did before? Or did someone at IBM just decided they could be squeezed for more profit?
A quick search for their financial reports showed that, as of 2019, they were making quite large piles of money. I was quite surprised at how much revenue they had: multiple billions of dollars in revenue and a healthy profit from this.
It’s not clear to me the extent to which CentOS affected this. My guess is that, by being more actively involved for the past few years, they’ve made it easier to measure how many sales that get as a conversion from CentOS users and found that it’s peanuts compared to the number of people that use CentOS as a way of avoiding paying an RHEL subscription.
I didn’t see any post-acquisition numbers but I wouldn’t be surprised if they’re seeing some squeezes from the trend towards containerisation. Almost all Linux containers that I’ve seen use Ubuntu if they want something that looks like a full-featured *NIX install or Alpine or something else tiny if they want a minimal system as their base layer. These containers then get run in clouds on Linux VMs that don’t have anything recognisable as a distro: they’re a kernel and a tiny initrd that has just enough to start containerd or equivalent. None of this requires a RedHat license and Docker makes it very easy to use Windows or macOS as client OS for developing them. That’s got to be eroding their revenue (and a shame, because they’re largely responsible for the Podman suite, which is a much nicer replacement for Docker, but probably won’t make them any money).
I’d say they’re not hurting in the containerization space, with OpenShift as the enterprisey Kubernetes distro, quay as the enterprisey container registry, and the fact that they own CoreOS.
If you’re deploying into the cloud, you’re using the cloud provider’s distro for managing containers, not OpenShift. You might use quay, but it incurs external bandwidth charges (and latency) and so will probably be more expensive and slower than the cloud provider’s registry. I don’t think I’ve ever seen a container image using a CoreOS base layer, though it’s possible, but I doubt you’d buy a support contract from Red Hat to do so.
You’re missing that enterprises value the vendor relationship and the support. They can and will do things that don’t seem to make sense externally but that’s because the reasoning is private or isn’t obvious outside that industry.
I’ve never seen a CoreOS-based container but I’ve seen a lot of RHEL-based ones.
You’re missing that enterprises value the vendor relationship and the support.
Possibly. I’ve never had a RHEL subscription but I’ve heard horror stories from people who did (bugs critical to their business ignored for a year and then auto closed because of no activity). Putting something that requires a connection to a license server in a container seems like a recipe for downtime.
I expect that big enterprise customers will not suffer stamping a license on every bare-metal host, virtual machine, and container. My experience is that connectivity outside the organization, even in public cloud, is highly controlled and curtailed. Fetching from a container registry goes through an allow-listed application-level proxy like Artifactory or Nexus, or through peculiarly local means. Hitting a license server on the public internet just isn’t going to happen. Beyond a certain size these organizations negotiate terms, among them all-you-can-eat and local license servers.
All this is easily findable on the Internets, but the tl;dr - yes. Red Hat was profitable. That’s Red Hat’s job, to turn a profit. It’s also Red Hat’s job to remain profitable and try to grow its market share, and to try to avoid being made irrelevant, etc.
Being a public company means that shareholders expect not only profit, but continual growth. Whether that’s a reasonable expectation or healthy is a separate discussion, but that’s the expectation for public companies – particularly those in the tech space. IBM paid $34 billion for Red Hat and is now obliged to ensure that it was worth the money they paid, and then some.
If RHEL clones are eating into sales and subscription renewals, Red Hat & IBM are obliged to fix that. I don’t work at Red Hat anymore, but it’s no secret that Red Hat has a target every quarter for renewals and new subscriptions. You want renewals to happen at a pretty high rate, because it’s expensive to sign new customers, and you want new subscriptions to happen at a rate that not only preserves the current revenue but grows it.
That’s the game, Red Hat didn’t make those rules, they just have to live by them.
Another factor I mean to write about elsewhere soon is the EOL for EL 7 and trying to ensure that customers are moving to RHEL 8/9/10 and not an alternative. When CentOS 7 goes EOL anybody on that release has to figure out what’s next. Red Hat doesn’t have any interest in sustaining or enabling a path to anything other than RHEL. In fact they have a duty to try to herd as many paying customers as possible to RHEL.
So it isn’t about “aren’t they making a profit today?” It’s about “are they growing their business and ensuring future growth sufficiently to satisfy the shareholders/market or not?”
My guess is that revenue was expected to start declining. Density of deployments has been rising rapidly since Xen and VServer came. Red Hat had to adjust pricing to cope multiple times, but I don’t believe they were able to track the trend.
Nowadays with containers, the density is even higher. We are at PHP shared hosting level density, but for any stack and workload. For simple applications, costs of running them are approaching the cost of the domain name.
Instead of fleet of 10 servers, each with their own subscription (you had in 2005-2010 with RHEL 4 & 5), you now have just 2U cluster with a mix of VMs and containers, with just two licenses.
And sometimes not even that. People just run a lightweight OS with Docker on top pretty frequently.
This is a band-aid on a bleeding wound, I believe.
They should be pursuing some new partnerships. It’s weird that e.g. Steam Deck is not running an OS from Red Hat. Or that you can’t pay a subscription for high quality (updated) containers running FLOSS, giving a portion of the revenue to the projects.
The Steam Deck might be a poor business case for Red Hat or Valve. Since the Steam Deck hardware is very predictable and it has a very specific workload, I don’t know if it would make sense to make a deal with Red Hat to support it. It would be a weird use case for RHEL/Red Hat, too, I think. At least it would’ve when I was there - I know Red Hat is trying to get into in-vehicle systems so there might be similarities now.
I am not saying Red Hat should be trying to support RHEL on a portable game console. It should have been able to spin a Fedora clone and help out with the drivers, graphics and emulation, though.
Somebody had to do the work and they made profits for someone else.
Concentrating on Java for banks won’t get them much talent and definitely won’t help get them inside the next generation of smart TVs that respect your privacy. Or something.
It would be a weird use case for RHEL/Red Hat, too. I know Red Hat is trying to get into in-vehicle systems so there might be similarities now.
One business case for Red Hat would be a tremendous install base, which would increase the raw number of people reporting bugs to Fedora or their RHEL spin. And that in turn could led IVI vendors to have really battle tested platorm+software combo. Just don’t let them talk directly to the normal support other companies are paying for.
My understanding is that Canonical has benefitted hugely from WSL in this regard. It’s practically the default Linux distro to run on WSL. If you want to run Linux software and you have a Windows machine, any tutorial that you find tells you how to install Ubuntu. That’s a huge number of users who otherwise wouldn’t have bothered. Ubuntu LTS releases also seem to be the default base layers for Mose dev containers, so if you open a lot of F/OSS repos in VS Code / GitHub Code Spaces, you’ll get an Ubuntu VM to develop in.
TLDR: Maybe your names are bad if your (generally happy) users keep misnaming your thing.
Old neckbeards (like me) generally just think in two categories: window managers (paint windows) and more batteries-included (have a taskbar, and some other stuff). That’s it, it’s either a window manager or a desktop environment. If it’s really so unique it warrants a new name it better not look and feel like “just” like a DE.
I think of a desktop environment as a lot more than a window manager. It also includes a widget set and a coherent set of user interface guidelines, a set of core GUI tools (e.g. a file manager), and services to support these applications. This is why GNOME and KDE are desktop environments but AfterStep and WindowMaker are not.
KDE provides far more than a window manager and a taskbar, it provides a set of Qt views for things, a component architecture, and so on. Plasma will happily manage windows for GNOME applications or things that don’t target a specific DE, such as XMMS, but KDE applications will often not work without a bunch of the KDE infrastructure.
Plasma will happily manage windows for GNOME applications or things that don’t target a specific DE, such as XMMS, but KDE applications will often not work without a bunch of the KDE infrastructure.
Interesting distinction. I haven’t tried running it in a long time, but I remember I had to launch Nautilus with the --no-desktop flag, otherwise it would literally come with a GNOME desktop along! If this has changed, I’d say it’s because it’s better designed now, not because it went from being a not-DE to a DE.
Anyway, that’s just semantics. The meat of the article that gets lost in the provocative title is “look at how flexible KDE actually is!”, which is fun to see. Functionally, I’m not sure how much that matters, except in an alternate reality where something like Ubuntu Touch actually took off and we used our pocket computers like the powerful computers they actually are.
If this has changed, I’d say it’s because it’s better designed now, not because it went from being a not-DE to a DE.
That’s not what I mean as a DE. Nautilus is part of a DE, but the fact that GNOME has standardised file pickers, standardised dialogs for a bunch of other things, a consistent look and feel across applications, a set of services that applications can depend on (many of these are now exposed via XDG interfaces and so can be replaced with non-GNOME ones) is what makes GNOME a DE not just a window manager and a bunch of applications.
It’s weird to use this title for a link that is not directly to Derek Sivers himself, but rather a blog quoting his post. To skip the intermediary, here’s Derek Sivers: https://sive.rs/openbsd
I can’t agree with this. I think it is worse to take money from unethical sources than to give them money.
If someone is taking money from you, you have a financial incentive to figure out a way to not have to pay them money. If someone is giving you money, you have a monetary incentive to help them become more successful and wealthy so they can give you more money. This warps your incentives and tends to make you agree with, support and defend the entity you’re taking money from.
People are aware of this and will trust you less if you take money from an unethical source.
Disclaimer: I work for Protocol Labs, but they’re very unlike any other ‘cryptocurrency company’ I know - fully open source, fully open research (not about patents), and we develop and maintain plenty of other projects that aren’t related to cryptocurrency per se (IPFS being the prime example, libp2p, a bunch of other go stuff)
This was almost 10 months in the making, with 2 attempts and coming back from the PR being closed by Stalebot multiple times. So glad it’s finally done.
One more argument for leaving GitHub! I haven’t seen stale bots on any of the FOSS code forges yet, and maybe we can build a culture that has better ways of dealing with the (entirely valid) problems of overwhelmed and demotivated maintainers.
They are a necessary evil, especially for a project like Serenity.
People love to invent, or port a feature or some grand refactoring, and then they get tired of it and leave their work to rot forever. The serenity stale bot as closed ~500 PRs over it’s life time that were left with no activity for over a month.
In my opinion, pull requests that are not ready for review (i.e. drafts or failing CI checks), are fair game to be closed as stale. However, bug reports, feature requests, and PRs that pass CI checks should remain open until they get attention from a maintainer.
I totally agree with that. We explicitly don’t enable stale bot for any issues, only PRs. There have been cases where PRs slipped through the cracks in SerenityOS and stale bot happened to close them. It’s just one click to bring them back and get them merged, so it always seemed like a reasonable trade-off to me. The community is generally watching for what stale bot reaps and have been good about raising anything that should be given attention.
I think everyone’s experience is going to be different, this is all highly subjective depending on what communities you want to interact with. That being said, I’m very pleasantly surprised at how smoothly the transition to Mastodon has gone for my professional/programming feed.
I’m shocked that it worked (~70% of people I follow have moved to Mastodon, and it’s more active than Twitter now). It’s like the year of Linux desktop happening.
It turns out all we need for the year of the Linux desktop to happen is for Elon Musk to buy a major competitor, say, Microsoft, or Apple. Doesn’t seem likely, but neither does a lot of stuff that is definitely happening in our timeline.
Maybe there is someone else (incredibly rich yet wildly incompetent and detached from reality) who could do Linux a similar service? It doesn’t literally have to be Elon Musk, it’s clear that wealth does not correlate with any ability or positive qualities whatsoever, there’s got to be hundreds of other (less famous?) plutocrats who also have the potential to destroy anything they touch. Thiel? DHH? Maybe a young con artist in the tradition of Theranos or FTX could convince investors to fund their joyride in the crumbling shell of a previously productive corporation.
0% chance. Elon Musk bought Twitter for $44 billion. Apple and Microsoft are worth way more than that.
Apple market cap: $2.29 trillion (52 Twitters)
Microsoft market cap: $1.80 trillion (41 Twitters)
Even assuming either company would consider privatizing (they wouldn’t), even the top 10 richest people pooling their net worth couldn’t buy either of them.
I’m on the one hand happy that it worked, but the move for me has been… spotty. Essentially my whole tech timeline moved, so that’s fine.
But I actively used Twitter to get into community I am very curious about. I have family in Botswana and so I used Twitter to stay up to speed on what happens in the region. All that migrated to about 0% and that’s a huge loss for me.
I need to check it out again. When I’ve tried it in the past, it always felt like a bunch of people and bots shouting into the void–lots of content, but very little dialogue.
Well, it’s not a platform that optimizes for constructive dialogue, so maybe a less ambiguous term would be “engagement”: there is a lot of engagement on Twitter, but very little on Mastodon (IME).
If you’re active on Twitter I can recommend using one of the services that checks if your followers are also on a Fediverse instance, and allow you to easily import them.
Unfortunately Firefox doesn’t support Insertable Streams, which is the WebRTC standard we (and others) use to provide video/audio encryption. I believe it’s on Firefox’s roadmap, but it’s not available yet. So for now users would have to use a chromium-based browser such as Chrome, Vivaldi, Brave, Edge, etc.
Yes. It’s built on livekit (client/server) which we’ve made light changes to, and then it goes through our network infrastructure and Fastly’s network infrastructure.
Can someone please explain the pros and cons of wiring your home with fiber? This article seems to skip explaining why they are going to the trouble of doing this.
Fast. You can lay fibre today that has longer reach at the same speed or higher speed at the same reach than copper.
Headroom. If you lay multi-mode fibre then you can almost certainly replace the physical interfaces at the ends without replacing the fibre. In contrast, if you lay Cat-6 today, GigE is your limit, if you lay Cat-7, the same is true for 10 GigE. The bottleneck for modern fibre is the transceivers at the end, not the cable.
Cost. Fibre is a lot cheaper than the Ethernet cabling that will handle high speeds.
Cons:
Cost. You need optical transcievers at the endpoints. These are more expensive than electrical ones, at least at the lower speeds.
Compatibility. Server NICs all support pluggable transceivers for optical connections but most laptop / consumer-electronics don’t. This means that you’ll probably want a switch with an optical upstream and an electrical downstream (or, ideally, a mix of optical and electrical) for rooms where you want the speed.
Diminishing returns. The jump from 10 Mb/s coax (shared bus) to a 100 Mb/s, full dupliex, switched network was huge. This is fast enough for multiple HD streams. The jump from 100 Mb/s to 1 Gb/s is smaller and you basically notice it only for large uploads or downloads (e.g. installing a game or backing up a disk). The jump to anything bigger needs workloads that I don’t have yet to matter. Possibly some immersive VR / AR thing will need that much, but for video the compression has improved quality a lot more than bandwidth increases in the last couple of decades. An H.264 720p stream now needs less than an artefact-ridden MPEG-1 320x240 stream used to.
If I were doing a new build, I’d be very tempted to lay fibre and cat6, so that I never have to think about it ever again.
IMO the biggest downside is that fiber is more of a pain to work with. You can unplug/replug your copper cables as much as you want, but you have to be careful not to scratch your fiber connectors or bend the cable
(yes, I know you can also kink a copper cable).
If you’re concerned about EMI (i.e. TEMPEST), then fibre also doesn’t have those emissions. The US federal government deploys a lot of fibre for that reason.
In case you happen to be a ham — fiber is RFI-immune. Longer copper ethernet runs can be prone to radiating wideband noise, as well as receiving RFI from nearby transmitters (which then degrades the network connection). Using shielded twisted pair is an option, but it’s nearly as expensive as fiber, and nearly as annoying to terminate as fiber. And, existing OM4 or OM5 fiber looks like it will manage 100Gbit links over in-house distances, which makes it more future-proof than Cat6A or even Cat8.
There’s plenty of usages I can think of that wouldn’t involve writing that to disk. Mostly to do with raw video transmission. Security systems, playing video games in a central beefy computer from a portable peripheral (Steam and Playstation support this), keeping video in a NAS and editing from around the house…
The thread on LKML about this work really doesn’t portray the Linux community in a good light. With a dozen or so new kernels being written in Rust, I wouldn’t be surprised if this team gives up dealing with Linus and goes to work on adding good Linux ABI compatibility to something else.
I dunno, Linus’ arguments make a lot of sense to me. It sounds like he’s trying to hammer some realism into the idealists. The easter bunny and santa claus comment was a bit much, but otherwise he sounds quite reasonable.
Disagreement is over whether “panic and stop” is appropriate for kernel, and here I think Linus is just wrong. Debugging can be done by panic handlers, there is just no need to continue.
Pierre Krieger said it much better, so I will quote:
Part of the reasons why I wrote a kernel is to confirm by experience (as I couldn’t be sure before) that “panic and stop” is a completely valid way to handle Rust panics even in the kernel, and “warn and continue” is extremely harmful. I’m just so so tired of the defensive programming ideology: “we can’t prevent logic errors therefore the program must be able to continue even a logic error happens”. That’s why my Linux logs are full of stupid warnings that everyone ignores and that everything is buggy.
One argument I can accept is that this should be a separate discussion, and Rust patch should follow Linux rule as it stands, however stupid it may be.
Linus’ writing style has always been kind of hyperbolic/polemic and I don’t anticipate that changing :(
But then again I’m amazed that Rust-in-Linux happened at all, so maybe I should allow for the possibility that Linus will surprise me.
This is exactly what I still don’t understand in this discussion. Is there something about stack unwinding and catching the panic that is fundamentally problematic in, eg a driver?
It actually seems like it would be so much better. It recovers some of the resiliency of a microkernel without giving up the performance benefits of a monolithic kernel.
What if, on an irrecoverable error, the graphics driver just panicked, caught the panic at some near-top-level entry point, reset to some known good state and continued? Seems like such an improvement.
I don’t believe the Linux kernel has a stack unwinder. I had an intern add one to the FreeBSD kernel a few years ago, but never upstreamed it (*NIX kernel programmers generally don’t want it). Kernel stack traces are generated by following frame-pointer chains and are best-effort debugging things, not required for correctness. The Windows kernel has full SEH support and uses it for all sorts of things (for example, if you try to access userspace memory and it faults, you get an exception, whereas in Linux or FreeBSD you use a copy-in or copy-out function to do the access and check the result).
The risk with stack unwinding in a context like this is that the stack unwinder trusts the contents of the stack. If you’re hitting a bug because of stack corruption then the stack unwinder can propagate that corruption elsewhere.
With the objtool/ORC stuff that went into Linux as part of the live-patching work a while back it does actually have a (reliable) stack unwinder: https://lwn.net/Articles/728339/
That’s fascinating. I’m not sure how it actually works for unwinding (rather than walking) the stack: It seems to discard the information about the location of registers other than the stack pointer, so I don’t see how it can restore callee-save registers that are spilled to the stack. This is necessary if you want to resume execution (unless you have a setjmp-like mechanism at the catch site, which adds a lot of overhead).
Ah, a terminological misunderstanding then I think – I hadn’t realized you meant “unwinding” specifically as something sophisticated enough to allow resuming execution after popping some number of frames off the stack; I had assumed you just meant traversal of the active frames on the stack, and I think that’s how the linked article used the term as well (though re-reading your comment now I realize it makes more sense in the way you meant it).
Since AFAIK it’s just to guarantee accurate stack backtraces for determining livepatch safety I don’t think the objtool/ORC functionality in the Linux kernel supports unwinding in your sense – I don’t know of anything in Linux that would make use of it, aside from maybe userspace memory accesses (though those use a separate ‘extable’ mechanism for explicitly-marked points in the code that might generate exceptions, e.g. this).
If I understand the userspace access things correctly, they look like the same mechanism as FreeBSD (no stack unwinding, just quick resumption to an error handler if you fault on the access).
I was quite surprised that the ORC[1] is bigger than DWARF. Usually DWARF debug info can get away with being large because it’s stored in separate pages in the binary from the file and so doesn’t consume any physical memory unless used. I guess speed does matter for things like DTrace / SystemTap probes, where you want to do a full stack trace quickly, but in the kernel you can’t easily lazily load the code.
The NT kernel has some really nice properties here. Almost all of the kernel’s memory (including the kernel’s code) is pageable. This means that the kernel’s unwind metadata can be swapped out if not in use, except for the small bits needed for the page-fault logic. In Windows, the metadata for paged-out pages is stored in PTEs and so you can even page out page-table pages, but you can then potentially need to page in every page in a page-table walk to handle a userspace fault. That extreme case probably mattered a lot more when 16 MiB of RAM was a lot for a workstation than it does now, but being able to page out rarely-used bits of kernel is quite useful.
In addition, the NT kernel has a complete SEH unwinder and so can easily throw exceptions. The SEH exception model is a lot nicer than the Itanium model for in-kernel use. The Itanium C++ ABI allocates exceptions and unwind state on the heap and then does a stack walk, popping frames off to get to handlers. The SEH model allocates them on the stack and then runs each cleanup frame, in turn, on the top of the stack then, at catch, runs some code on top of the stack before popping off all of the remaining frames[2]. This lets you use exceptions to handle out-of-memory conditions (though not out-of-stack-space conditions) reliably.
[1] Such a confusing acronym in this context, given that the modern LLVM JIT is also called ORC.
[2] There are some comments in the SEH code that suggest that it’s flexible enough to support the complete set of Common Lisp exception models, though I don’t know if anyone has ever taken advantage of this. The Itanium ABI can’t support resumable exceptions and needs some hoop jumping for restartable ones.
What you are missing is that stack unwinding requires destructors, for example to unlock locks you locked. It does work fine for Rust kernels, but not for Linux.
As far as I understand, yeah, sometimes the kernel would prefer to roll with corrupted memory as far as possible:
So BUG_ON() is basically ALWAYS 100% the wrong thing to do. The
argument that “there could be memory corruption” is [not applicable in this context].
See above why.
As far as I understand, yeah, sometimes the kernel would prefer to roll with corrupted memory as far as possible:
That’s what I got from the thread and I don’t understand the attitude at all. Once you’ve detected memory corruption then there is nothing that a kernel can do safely and anything that it does risks propagating the corruption to persistent storage and destroying the user’s data.
Linus is also wrong that there’s nothing outside of a kernel that can handle this kind of failure. Modern hardware lets you make it very difficult to accidentally modify the kernel page tables. As I recall, XNU removes all of the pages containing kernel code from the direct map and protects the kernel’s page tables from modification, so that unrecoverable errors can take an interrupt vector to some immutable code that can then write crash dumps or telemetry and reboot. Windows does this from the Secure Kernel, which is effectively a separate VM that has access to all of the main VM’s memory but which is protected from it. On Android, Halfnium provides this kind of abstraction.
I read that entire thread as Linus asserting that the way that Linux does things is the only way that kernel programming can possibly work, ignoring the fact that other kernels use different idioms that are significantly better.
Reading this thread is a little difficult because the discussion is evenly spread between the patch set being proposed, some hypothetical plans for further patch sets, and some existing bad blood between the Linux and Rust community.
The “roll with corrupted memory as far as possible” part is probably a case of the “bad blood” part. Linux is way more permissive with this than it ought to be but this is probably about something else.
The initial Rust support patch set failed very eagerly and panicked, including on cases where it really is legit not to panic, like when failing to allocate some memory in a driver initialization code. Obviously, the Linux idiom there isn’t “go on with whatever junk pointer kmalloc gives you there” – you (hopefully – and this is why we should really root for memory safety, because “hopefully” shouldn’t be a part of this!) bail out, that driver’s initialization fails but kernel execution obviously continues, as it probably does on just about every general-purpose kernel out there.
The patchset’s authors actually clarified immediately that the eager panics are actually just an artefact of the early development status – an alloc implementation (and some bits of std) that follows safe kernel idioms was needed, but it was a ton of work so it was scheduled for later, as it really wasn’t relevant for a first proof of concept – which was actually a very sane approach.
However, that didn’t stop seemingly half the Rustaceans on Twitter to take out their pitchforks, insists that you should absolutely fail hard if memory allocation fails because what else are you going to do, and rant about how Linux is unsafe and it’s riddled with security bugs because it’s written by obsolete monkeys from the nineties whose approach to memory allocation failures is “well, what could go wrong?” . Which is really not the case, and it really does ignore how much work went into bolting the limited memory safety guarantees that Linux offers on as many systems as it does, while continuing to run critical applications.
So when someone mentions Rust’s safety guarantees, even in hypothetical cases, there’s a knee-jerk reaction for some folks on the LKML to feel like this is gonna be one of those cases of someone shitting on their work.
I don’t want to defend it, it’s absolutely the wrong thing to do and I think experienced developers like Linus should realize there’s a difference between programmers actually trying to use Rust for real-world problems (like Linux), and Rust advocates for whom everything falls under either “Rust excels at this” or “this is an irrelevant niche case”. This is not a low-effort patch, lots of thinking went into it, and there’s bound to be some impedance mismatch between a safe language that tries to offer compile-time guarantees and a kernel historically built on overcoming compiler permisiveness through idioms and well-chosen runtime tradeoffs. I don’t think the Linux kernel folks are dealing with this the way they ought to be dealing with it, I just want to offer an interpretation key :-D.
In an ideal world we could have panic and stop in the kernel. But what the kernel does now is what people expect. It’s very hard to make such a sweeping change.
Sorry, this is a tangent, but your phrasing took me back to one of my favorite webcomics, A Miracle of Science, where mad scientists suffer from a “memetic disease” that causes them to e.g. monologue and explain their plans (and other cliches), but also allows them to make impossible scientific breakthroughs.
One sign that someone may be suffering from Science Related Memetic Disorder is the phrase “in a perfect world”. It’s never clearly stated exactly why mad scientists tend to say this, but I’d speculate it’s because in their pursuit of their utopian visions, they make compromises (ethical, ugly hacks to technology, etc.), that they wouldn’t have to make in “a perfect world”, and this annoys them. Perhaps it drives them to take over the world and make things “perfect”.
Maybe I’m missing some context, but it looks like Linus is replying to “we don’t want to invoke undefined behavior” with “panicking is bad”, which makes it seem like irrelevant grandstanding.
The part about debugging specifically makes sense in the “cultural” context of Linux, but it’s not a matter of realism. There were several attempts to get “real” in-kernel debugging support in Linux. None of them really gained much traction, because none of them really worked (as in, reliably, for enough people, and without involving ritual sacrifices), so people sort of begrudgingly settled for debugging by printf and logging unless you really can’t do it otherwise. Realistically, there are kernels that do “panic and stop” well and are very debuggable.
Also realistically, though: Linux is not one of those kernels, and it doesn’t quite have the right architecture for it, either, so backporting one of these approaches onto it is unlikely to be practical. Linus’ arguments are correct in this context but only insofar as they apply to Linux, this isn’t a case of hammering realism into idealists. The idealists didn’t divine this thing in some programming class that only used pen, paper and algebra, they saw other operating systems doing it.
That being said, I do think people in the Rust advocacy circles really underestimate how difficult it is to get this working well for a production kernel. Implementing panic handling and a barebones in-kernel debugger that can nonetheless usefully handle 99% of the crashes in a tiny microkernel is something you can walk third-year students through. Implementing a useful in-kernel debugger that can reliably debug failures in any context, on NUMA hardware of various architectures, even on a tiny, elegant microkernel, is a whole other story. Pointing out that there are Rust kernels that do it well (Redshirt comes to mind) isn’t very productive. I suspect most people already know it’s possible, since e.g. Solaris did it well, years ago. But the kind of work that went into that, on every level of the kernel, not just the debugging end, is mind-blowing.
(Edit: I also suspect this is the usual Rust cultural barrier at work here. The Linux kernel community is absolutely bad at welcoming new contributors. New Rust contributors are also really bad at making themselves welcome. Entertaining the remote theoretical possibility that, unlikely though it might be, it is nonetheless in the realm of physical possibility that you may have to bend your technology around some problems, rather than bending the problems around your technology, or even, God forbid, that you might be wrong about something, can take you a very long way outside a fan bulletin board.)
Nobody here has addressed the obvious response here: if RMS is deadweight, and the FSF are permanently chained to him, then the solution is a separate organization.
I think the Software Freedom Conservancy is one of the closest successor organizations, since it has experience enforcing GPL compliance. https://sfconservancy.org/
I’ve also enjoyed some of their recent actions, such as the Give Up GitHub campaign. I think they embody a lot of the same ethics without the baggage (RMS).
But they are a different org and do not have an identical mission or the same capabilities, and cannot be considered a direct replacement.
The fact we’re celebrating hackish extensions on top of TTYs is a sign of the myopia in our industry. We have all these great ways to render any kind of interface (even 1980’s bitmaps are an improvement), command line or not, and we just consider 1977 state of the art to be perfect.
While I think it’s valid to criticize “back to the future” efforts to revitalize the command line instead of doing something new, I’d like to see more efforts to replicate the strengths of the command line in new UIs. I like this summary of the command line’s advantages:
Power of the keyboard — the keyboard allows for faster input than the alternation of keyboard & mouse usage.
Reproducibility — because all commands are text, they may be more easily reproduced and shared.
Composable commands — commands on the command line may be arbitrarily composed, using the output of one command as the input of another. This allows for powerful means of expression.
Scripting — the interactive session may be used as the basis for a script (a computer program), allowing for the automation of certain tasks.
Any GUI that fulfilled these requirements as well as a TTY would be a force to be reckoned with, at least with the vital programmer demographic. You can see some successful efforts to bring these into the GUI world, such as Spotlight harnessing the power of the keyboard for desktop search, but generally this is underexplored territory IMHO.
I’ll also echo @bsandro’s advantages of standardization, portability (between windowing systems and OSes), and remote connection (via SSH).
In the absence of efforts to replicate the command line’s strengths, I will continue to invest time and energy into command line and TUI software.
Command lines and GUIs aren’t a dichotomy - things from CLIM to Mathematica should make this known. Even within more commodity things, command palettes, AppleScript/Shortcuts/OSA, and the fact Windows is fully keyboard navigable make this already addressed.
And as much as I don’t like Pike, I have to agree with his studies on keyboard and mouse, where the mouse was found to be actually faster, even if it didn’t feel like it. With newer HID, that leads to me swiping on the trackpad to switch workspaces instead of going for the keyboard. With future HID, who knows what’s next?
and the fact Windows is fully keyboard navigable make this already addressed.
I’m creating apps that enable faster interaction with medical software by using the Windows automation. I assure you this is not the case and I’m trying really hard to use the accessibility/Windows apis, before attempting to use keyboard, before resorting to “look for this and that field and click between them + about 5px to the right”. It’s uncommon, but still way more common than it should be.
Any GUI that fulfilled these requirements as well as a TTY would be a force to be reckoned with…
What about the Oberon interface, which was a very strong influence on Plan 9 and Acme? I’d say those are both GUIs that meet all of those requirements, with the possible exception of the first one (people have forked Acme and added more keyboard-only control but I’m not sure it caught on, possibly because that advantage isn’t really real).
@calvin also pointed me at Apollo’s Domain/OS a while ago: there are some similar interface ideas in there too.
… at least with the vital programmer demographic.
That’s the problem, really. Within little niches, people are already using alternative interfaces. They just never make it to the mainstream as they aren’t compatible with the lowest common denominator.
It’s depressing, isn’t it? Everyone would rather cosplay a 1970s mainframe wizard than consider what a 21st century interface could be.
Well, not everyone. We also have people using GUI IDEs from the ‘90s. I don’t know what would be better but I think it’s a shame that nothing new has appeared for a while now.
I wonder if we’re stuck at a lowest common denominator? I’ve seen some cool programming interfaces for Smalltalk but that’s no good unless you’re using Smalltalk. Are we stuck because everything has to be cross-platform and language-agnostic?
One of the recent articles on here really resonated with me, about how desktop GUIs got lost after the advent of tablets fooled them into wanting to merge the two ways of interacting. It explains why there’s so much interest in terminals and 90s GUIs: we’re looking for things that fit laptops/desktops better than the current bad tablet-oriented compromises. Maybe we’re stuck in a dead-end, and by rewinding to GUIs that worked well, we can break out and start improving things again.
It sounds like you consider more pixels to be better, or perhaps more arbitrary layouts of information.
While the terminal isn’t perfect, it seems a lot of people find it very powerful and useful. I’d love to see your prototype of a better system. Would it be something like a Jupiter notebook for shell? Or what ?
Are bitmaps better though? I can’t think of a system that’s better than terminal for everything. (I’m excluding actual images of course) Specific cases, sure, but even though I’m using vscode, half the time I’ve got a terminal panel open inside it.
When things are outside the terminal, I normally run into this issue: how do I filter / reuse / compose this information? For example, I’ll take lshw / lspci over a Windows device info app because it’s so much more useful. Sure, we could do better and there are ideas like powershell and other shells that try to present structured outputs. I keep trying those and finding out they’re just not convenient enough to be worth switching.
I disagree that it’s an industry myopia - there’s a new project trying to improve the situation every week. None have really succeeded as far as I can tell. There’s a chance we’re really at the global maximum right now with the idea of “pretty text in a grid for interactive use + a flag for structured output + bitmaps for very specific things that require bitmaps”, yet we’re still able to constantly improve on that with various implementations.
Specific cases, sure, but even though I’m using vscode, half the time I’ve got a terminal panel open inside it.
What if you could just execute a shell command from within VS Code? For example, suppose you could select any text in any tab or panel, then right-click and choose “Run in shell” or something similar. Then you’d get the result as editable text in a new tab. Or maybe you could select any text and pipe it into stdin for an arbitrary shell command, with an option to replace the selected text with the result. Or the selected text could be the arguments to a shell command. You’d get all the flexibility of textual commands and outputs, with all the ability to filter / reuse / compose results, but integrated into your editor, rather than having to copy & paste things to and from a separate terminal panel.
Maybe there’s a VS Code extension that does this, I have no idea. I just wonder if it’s really the terminal that you want, or is it the ability to compose commands and munge their output?
I don’t think that would be helpful (for me). Issues: already too many tabs, how to handle interactive commands, how to handle binary input/output, how to handle command history, how to handle huge/streaming/ephemeral data? Also, previous output / task context wouldn’t be visible. Once in a while I do want the output in a tab… so I redirect to /tmp/foo and ctrl-click it in the terminal panel - solves 99% of what you describe without requiring a redo of the whole system.
Running the selection as a command already exists as “workbench.action.terminal.runSelectedText”.
or is it the ability to compose commands and munge their output?
This, but the new system would have to do it better than the plain terminal solution.
I like that you call it “the plain terminal solution” - to me, embedding a whole terminal emulator seems much more complicated than the “plain” solution :)
Regarding the other issues, I’m not sure why the terminal solves any of them better than a normal text editor window - except the interactive commands, I guess. But I’m not trying to convince you of the merit of my entirely hypothetical vscode extension, just trying to work out if it’s really a terminal emulator that you want rather than specifically the ability to run and manipulate shell commands.
The article is about using terminal escape sequences to build TUIs, which seems like a weird thing to want in a panel inside a real GUI application like VS Code.
I think there is another benefit that make the terminal more appealing than that hypothetical extension and I see it rarely mentioned. The command line offers a very strict chronological command/response interaction. A new command is placed at the bottom, older stuff moves up.
This means that I have a clear overview of history, with specific information of all the steps. This command resulted in that output. It also follows one thread of history per terminal. So while one can do things in parallel, nothing gets “lost” running in the background.
That historical overview is for instance what is missing from Jupiter notebooks and I find them always very confusing to work with when I need to do more than just follow the steps from top to bottom.
I completely agree! Although I think that’s an argument against this sort of terminal interface…
The problem is the overloading of the word “terminal”. Although the article is called The Renaissance of the Command Line, it’s really more about TUIs: the ncurses style of interface that uses terminal escape sequences. Likewise, the top comment in this thread is about rendering interfaces using “hackish extensions on top of TTYs”. When you use that sort of interface, you lose your history in the terminal. You can’t scroll up and see exactly what that vim command did.
Obviously, you can’t “scroll up” and see exactly what that code or subl command did either. But since neither TUIs nor GUIs preserve terminal history, that’s obviously not an advantage for TUIs.
I sometimes use good old ed for sysadmin work, because it preserves the history. Then I really can scroll up and see a very clear audit log of this command resulted in that output.
I’m not against having a terminal window into which you can type commands: I still think that’s the best interface for many situations. I’m more questioning the utility of TUIs. Or, to put it another way, a “dumb” terminal is great, but should we really, in the 21st century, be building application interfaces on top of an emulated VT100?
Too power hungry for my taste. No easy way to host inside docker, which made it a pain to keep running. I’m very happy with Fosstodon, and don’t see a reason to switch to a self-hosted instance any time soon.
I run an instance too and agree it’s too power hungry. Just the RAM requirements are a bit excessive. Ruby seems to use a lot, as does Postgres and elasticsearch (not required, but needed if you want good searchability)
I’ve been running a node from under my desk and I gotta say I’ve been really impressed with the ease of installation and the responsiveness of the dev team. Everything that I ran into was due to generic self-hosting problems like dynamic DNS and hairpin routing, gotosocial itself hasn’t given me any trouble.
This is what I use to run my server on, I have a server that could run Mastodon but it’s so fiddly to setup and operate that I never bothered. GtS on the other hand is extremely easy to run and they are very quickly (surprisingly so) adding features to give it parity with Mastodon.
What I’m waiting for is a “migrate from Pleroma to GTS” guide. I can probably figure it out but it looks like a mountain of faff and pain that my brain fog prevents right now.
There’s also Honk! if you’re willing to go SUPER minimalist.
I’m with the OP as well. I ran a Mastodon instance of my own for a bit less than a year, and after a few iterations of Rails migrations, the back-end and the front-end refused to speak and nobody could figure out why so I gave up :)
For people like me who would never consider Pleroma because of their, um, politics, it’s worth noting there is a hard fork called Akkoma that is working to save the technology from its toxic community: https://coffee-and-dreams.uk/development/2022/06/24/akkoma.html
…I’ve never seriously considered getting involved in fediverse dev (mastodon is no better for my mental health than twitter is), but I have to admit that hacking on Akkoma sounds fun. I’ve been wanting a good excuse to get into Elixir/Erlang’s ecosystem more.
I did some development on Pleroma back before their dev team got overtaken by shitlords, and I have to say I was impressed with how approachable it was. I’ve never done Elixir before but I have some dusty experience with Erlang and some very dusty experience with Rails and everything seemed to fit together in a sensible way, kind of what I wish Rails could have been. I wrote about my experience here: https://technomancy.us/191
It’s possible that part of your confusion is that with an open source project, it is often possible to use the software without directly giving the developers money or other obvious support. But this seems unwise if you want the software to continue to be developed and maintained, as most users of software do. And if you engage in less monetary ways like filing bug reports, you then have to interact with the people you do not like.
Fortunately this is a demonstration of one strength of FOSS, the right to fork: people who do not want to work with the Pleroma developers can take the codebase and go their own way, as Akkoma seems to be doing. Why spend time with people you don’t get along with, if you could just… not?
People who write open source software write it, primarily, for themselves. It will end up optimised for their use cases. If they are interested in creating a society that is antithetical to one in which I want to live then, pragmatically, they will probably evolve the software in directions that I dislike.
This seems like quite a bit of a stretch. Perhaps for social media, since different groups have different ideas on how to regular discourse, but vast amounts of software don’t fall in this bucks.
If libpng was written by Hitler, it still does the job.
This divisive attitude leaking (primarily?) out of America is seriously not healthy. For better or worse, people you do not agree with will not simply disappear. If we stop talking, all that is left is violence.
If libpng was written by Hitler, it still does the job.
It does run the same, yes. But as skyfaller was saying, if you want to report a bug or send a patch, you depend on Hitler. Unless you fork. I don’t think such an extreme example serves your argument well.
This divisive attitude leaking (primarily?) out of America is seriously not healthy. For better or worse, people you do not agree with will not simply disappear. If we stop talking, all that is left is violence.
Case in point: out-of-context, I would like to agree with this. But now that you mentioned Hitler, I have to remind you that western democraties actually kept talking with him until very late in the 30s. It didn’t stop the violence.
Most people are not Hitler, and we all know it. It was hyperbole for effect, and we all know that too. I feel you’re intentionally missing my obvious point.
The vast majority of your (likely) fellow Americans who you disagree with are not bad people. This is a deeply unhealthy perspective that will only make things worse, and outside this argument you surely know this too.
If libpng was written by Hitler, it still does the job.
This isn’t about libpng; it’s about Pleroma, which is a social media tool.
It turns out when these kinds of people have atrocious opinions about minorities, they tend to also have bad ideas about moderation and harassment; they only care about the use cases that matter to straight white males.
I think it’s a bad idea to run social software that’s written by people who don’t care about moderation and protecting their users.
they only care about the use cases that matter to straight white males.
Citation needed please.
I think it’s a bad idea to run social software that’s written by people who don’t care about moderation and protecting their users.
Social software is about bringing people together, right? Moderation and protecting users is about keeping people apart. I’ll cheerfully admit that there are reasons we keep people apart, but if the criteria is “software to bring people together” it seems obvious to me that the more laid-back software is the way to go.
The platonic ideal of protecting users is putting them in a box by themselves.
Social software is about bringing people together, right? Moderation and protecting users is about keeping people apart.
This kind of simplistic thinking is exactly the kind of thing that would be an enormous red flag if I was evaluating social media servers and I heard one of the maintainers saying it.
I think it’s mostly rails actually. Ruby has a bit of a bad reputation when it comes to performance, when it’s mostly rails. In that area, other than JS always used to do the best, and compared to language implementations like Python it’s quite fast.
At least it was like that ages ago, when someone told me they want to rewrite some big project thinking switching away from Ruby would somehow magically make things faster.
I’ve never heard of Ruby being described as ‘quite fast’ compared to Python. Way back in the Ruby 1.8 days, Python was faster, but they’re now more or less neck and neck in terms of performance. Ruby got a bad reputation because of how slow its AST-based interpreter was back in the day.
On the other hand, JavaScript (specifically V8) and PHP are faster than both.
take down completely law-abiding, constitutional content
You understand that’s not what we’re talking about with Kiwi Farms? Cloudflare’s post linked here says
we believe there is an unprecedented emergency and immediate threat to human life unlike we have previously seen from Kiwifarms or any other customer before.
It isn’t an unprecedented emergency. Someone posted a terrorist threat, which was removed from the site within minutes by the admin, and the information about the user was passed to law enforcement, as is longstanding site policy in such cases. This sort of thing happens on all kinds of forums and social media sites – threat posted, threat removed, threatener reported to authorities.
What is unprecedented is that this made Cloudflare block the site.
That’s exactly the kind of thing you say if you conceded to the outcry for whatever reason, but don’t want to admit that social movements have that kind of sway over your decisionmaking.
If this “documentation” about Keffals is from Kiwifarms, I don’t think this is something you should be repeating as fact. It is a trolling, doxxing and harrassment site and shouldn’t be mistaken for journalism.
I think when the site is the point of contention, citing it (it cites it’s sources backed up with archive links where possible) is completely reasonable.
The accusations primarily come from Twitter and Discord users involved, corroborated with tweet archives and witness testimony. It is up to you what the preponderance of the evidence suggests.
No, it’s up to YOU to consider the evidence before sharing, instead of mindlessly posting accusations of pædophilia.
You can’t repost hateshit here and then innocently go “just repeating what I’ve read, feel free to make up your own mind”.
You went deep enough to find the paedophilia slander; therefore you are certainly aware that KiwiFarms has an harrassment campaign going on; and this did not stop you from reposting the slander? You know exactly what you’re doing.
I also note that half your comments in this thread are a mixture of (a) reasonable argument about “the social-moral freedom of businesses to simply afford customers service” and “uncensorable people at their worst”, and (b) some KF talking point that is unconnected to your argument. I’m thinking specifically of
“Personally, considering anything on Kiwi Farms “ an imminent and emergency threat to human life” is laughable if you’ve visited the site, ever.” (link)
By the way, this suggests that you’ve visited Kiwi Farms and didn’t find it so bad. Not a point in your favour.
Going “the evidence is out there” when I pointed out you were, intentionally or unintentionally, spreading Kiwifarms hateshit. (the comment I’m replying to). A reply that makes it pretty clear you’re spreading the hateshit intentionally.
My personal reading on this is that you are intentionally spreading KF talking points, and posting them as part of longer on-topic comments to muddy the waters and avoid getting moderated.
@pushcx and other mods, this thread is probably a bear of a job already, and I see you are monitoring and moderating already, for which my thanks. Could you please look at the opening comment again? I know that 80% of the text is reasonable, but the ‘innocently repeated’ pedophilia hateshit needs to be excised. If it were in a separate comment it would be gone already. Thanks for taking another look.
By the way, this suggests that you’ve visited Kiwi Farms and didn’t find it so bad. Not a point in your favour.
This is a false conclusion. I have visited kiwi farms. I do find it bad. It’s not contradictory at all to hold the position “Kiwi farms is bad, however, it’s laughable any user on that platform is an imminent and/or emergency threat to human life”. I really don’t care for the site or it’s continued existence. I do care for the risk of landsliding DDOS protection and CDN services into stricter, unproductive or otherwise “generally worse” circumstances.
You do realize how difficult it is to evaluate a situation like this if all of the data (true or not, good or not) is being proactively censored, yes?
“These are literally the worst people for what they posted also no we cannot show what they posted or talk about it” is a formulation that cannot coexist with meaningful discussion of any type or rigor.
I’m not going to permit republishing their abuse here because they occasionally pretend they’re righteous vigilantes. It’s not difficult to evaluate because they’re obvious lying. If they had the vaguest sliver of justification they’d be an internationally recognized charity group that works with law enforcement like ICMEC, NCMEC or RAINN. Instead they’re a collaborative creative writing group like r/nosleep that also pretends their fictions are real, except instead of telling spooky stories with a flashlight under their chin, they recontextualize and invent evidence that their victims deserve the harassment they themselves commit. To be unambiguous: comments that repost their abuse will be removed and posters banned.
I am also concerned about the lack of ability to censor the distributed systems that people want to eventually take place of these behemoth corporations. Do we really want swathes of uncensorable people at their worst, or does the risk of censorship at least provide a meaningful degree of moderation w.r.t the most extreme things people say and actionably call for? (Personally, considering anything on Kiwi Farms “ an imminent and emergency threat to human life” is laughable if you’ve visited the site, ever.)
People like to laugh at the former prime minister of my country for saying“The laws of mathematics are very commendable, but the only law that applies in Australia is the law of Australia.” I never laughed - it’s true, and a sobering thought for distributed communication projects. If you participate in a communication system which is uncensorable then your communication will be out there for all time. You’d better not misstep in case it becomes illegal later. And if operating that system means past content is downloaded to your computer, then using the system at all becomes de facto illegal. Once made illegal, ISPs can be tasked with monitoring for people who use said systems or using tools to obfuscate their activity. Whether it’s distributed or not, it all comes back to the law in the end.
Agreed on everything but Copilot. The freedom to study how the software works is a fundamental attribute of free software. Learning is not covered by the GPL’s requirements. Copilot sometimes copypastes code (honestly - who doesn’t) but broadly it learns. This is entirely in keeping with open source.
If we’re gonna set a standard that you can’t use things you learnt in software under an open-source license when writing commercial software, we might as well shutter either the entire software industry or the entire open-source movement, because literally everybody does that. It’s how brains work!
And of course, it’s not like being off Github is gonna prevent MS from feeding your project into Copilot 2.
Like all of these neural network “AIs”, it’s just a pattern recognition system that launders the work of many humans into a new form, which the corporation can profit from but the humans cannot. It’s piracy for entities rich enough to train and operate such an AI, and unethical enough to acquire the training data, but you or I would still be punished for pirating from the corporation. Whether or not it is legal is irrelevant to me (I’m in favor of abolishing copyright), but we must recognize the increasing power imbalance between individuals and corporations such “AI” represents.
Copilot understands nothing of what it writes. It learns nothing and knows nothing. It is not sentient or alive, no matter how tempting it is to anthropomorphize it.
I think “pattern recognition system that launders the work of many humans into a new form” is just a rude way to phrase “learning.”
Define “understands.” Define “knows.” I think transformers derive tiered abstract patterns from input that they can generalize and apply to new situations. That’s what learning is to me.
The standard philosophical definition of knowledge is a justified true belief. Copilot and other AIs make the belief part problematic, so bracket that. But they don’t justify things well at all. Justification is a social process of showing why something is true. The AIs sound like total bullshit artists when asked to justify anything. I don’t think Copilot “knows” things anymore than a dictionary does yet.
Putting aside Gettier cases, that’s not what I understand “justified” to mean. You just need to have a reason for holding the knowledge. With AI, reinforcement learning is the justification.
The point of “justified belief” is just that it’s not knowledge if you just guess that it’s raining outside, even if it is in fact raining.
The definition that @carlmjohnson is quoting is Plato’s and ever since Plato put it forth, knowledge theorists have been bickering about what “justified” means. The history of ideas after the age of Boethius or so isn’t quite my strong point so I’ll leave that part to someone else but FWIW most classical definitions of justification either don’t readily apply to reinforced learning, or if they do, it fails them quite badly.
That being said, if you want to go forth with that definition, it’s very hard to frame a statistical model’s output as belief in the first place, whether justified or not. Even for the simplest kinds of statistical models (classification problems with binary output – yes/no) it’s not at all clear to formulate what belief the model possesses. For example, it’s trivial to train a model to recognize if a given text is an Ancient Greek play or not. But when you feed it a piece of text, the question that the model is “pondering” isn’t “Is this an Ancient Greek play”, but “Should I say yes?”, just like any other classification model. If subjected to the right laws and statements, a model that predicts whether a statement would cause someone to be held in contempt of the court might also end up telling you if a given text is an Ancient Greek play with reasonable accuracy, too. “Is this an Ancient Greek play?” and “Is this statement in contempt of the court?” are not equivalent statements, but the model will happily appear to make both with considerable accuracy.
The model is making an inference about the content (“This content is of the kind I say yes to/the kind I say no to”), but because the two kinds cannot be associated to a distinct piece of information about the subject being fed to the model, I don’t think it can be said to constitute a belief. It’s not a statement that something is the case because it’s not clear what it asserts to be the case or not: there are infinitely many different classification problems that a model might turn out to solve satisfactorily.
In Greek, “justified” was some variation on “logos”: an account. Obviously everyone and their Buridan’s ass has a pet theory of justification, but I think it’s fair to interpret Plato’s mooted definition (it’s rejected in the dialogue IIRC!) as being “the ability to give an account of why the belief is true”. This is the ability which Socrates finds that everyone lacks, and why he says he knows that he knows nothing.
Ugh, it’s really tricky. This comes up in two dialogs: Theaetetus, where knowledge gets defined as “true judgement with an account” (which IIRC is the logos part) and it’s plainly rejected in the end. The other one is Meno, where it’s discussed in the terms of the difference between true belief and knowledge, but the matter is not definitively resolved.
I was definitely wrong to say it was Plato’s – I think I edited my comment which initially said “is effectively Plato’s” because I thought it was too wordy but I was 100% wrong to do it, as Plato doesn’t actually use this formulation anywhere (although his position, or rather a position that can be inferred from the dialogues, is frequently summarized in these terms). (Edit: FWIW this is a super frequent problem with modern people talking about ancient sources and one of the ways you can probably tell I’m an amateur :P)
I think it’s fair to interpret Plato’s mooted definition (it’s rejected in the dialogue IIRC!) as being “the ability to give an account of why the belief is true”.
You may know of this already but just in case your familiarity with modern philosophy is as spotty as mine, only it’s got holes in different places, and if you’re super curious patient, you’re going to find Gettier’s “Is Justified True Belief Knowledge?” truly fascinating. It’s a landmark paper that formalizes a whole lot of objections to this, some of them formulated as early as the 15th century or so.
The counter-examples Gettier comes up with are better from a formal standpoint but Russel famously formulated one that’s really straightforward.
Suppose I’m looking at a clock which shows it’s two o’clock, so I believe it’s two o’clock. It really is two o’clock – it appears that I possess a belief that is both justified (I just looked at the clock!) and true (it really is two o’clock). I can make a bunch of deductions that are going to be true, to: for example, if I were to think that thirty minutes from now it’s going to be half past two, I’d be right. But – thought I haven’t realized it – that clock has in fact stopped working since yesterday at two. (Bear with me, we’re talking about clocks from Russell’s age). My belief is justified, and it’s true, but only by accident: what I have is not knowledge, but sheer luck – I could’ve looked at the clock as half past two and held the same justified belief, but it would’ve been false, suggesting that an external factor may also be involved in whether a belief is true or not, justified or not, and, thus, knowledge or not, besides the inherent truth and justification of a statement.
The counter-examples Gettier comes up with are better from a formal standpoint but Russel famously formulated one that’s really straightforward.
I love collecting “realistic” Gettier problems:
You’re asked a question and presented with a multiple choice answer. You can rule out 3 of the answers by metagaming (one is two orders of magnitude different from the others, etc)
I give you a 100 reasons why I believe X. You examine the first 30 of them and they’re all completely nonsensical. In fact, every argument but #41 is garbage. Argument #41 is irrefutable.
I believe “Poets commit suicide more often than the general population”, because several places say they commit suicide at 30x the rate. This claim turns out to be bunk, and a later investigation finds it’s more like 1.1x.
I encounter a bug and know, from all my past experience dealing with it, that it’s probably reason X. I have not actually looked at the code, or even know what language it’s programmed in, and it’s one notable for not having X-type bugs. The developers were doing something extremely weird that subverted that guarantee, though, and it is in fact X.
I find an empirical study convincingly showing X. The data turns out to have been completely faked. This is discovered by an unrelated team of experts who then publish an empirical study convincingly showing X’, which is an even stronger claim than X.
My favourite ones come from debugging, that’s actually what got me into this in the first place (along with my Microwave Systems prof stubbornly insisting that you should know these things, even if engineers frown upon it, but that’s a whole other story):
While debugging an Ethernet adapter’s driver, I am pinging another machine and watching the RX packet count of an interface go up, so I believe packets are being received on that interface, and the number of packets received on my machine matches the number of packets that the other machine is sending to it. Packets are indeed being received on the interface. I made a stupid copy-paste error in the code: I’m reading from the TX count register and reporting that as the RX count. It only shows the correct value because sending a ping packet generates a single response packet, so the two counts happen to match.
An RTOS’ task overflows its stack (this was proprietary, it’s complicated) and bumps into another task’s stack, corrupting it. I infer the system crashes because of the stack corruption. Indeed, I can see task A bumping into task B’s stack, then A yields to B, and B eventually jumps at whatever garbage is on the stack, thus indeed crashing the system. There’s actually a bug in the process manager which causes the task table to become corrupted: A does overflow its task, but B’s stack is not located where A is overflowing. When A yields to B, the context is incorrectly restored, and B looks for its stack someplace else than it actually is, loading the stack pointer with an incorrect value. It just so happens that, because B is usually started before A, the bug is usually triggered by B yielding to A, but A just sits in a loop and toggles a couple of flags, so it’s never doing anything with the stack and never crashes, even though its stack does eventually get corrupted, too.
I got a few other ones but it’s really late here and I’m not sure I’m quite coherent by now :-D.
I’m familiar with Gettier cases. I never dove very deep into the literature. It always struck me that a justification is not just a verbal formulation but needs some causal connection to the fact of the matter: a working clock causes my reasoning to be correct but a stopped clock has no causal power etc. I’m sure someone has already worked out something like this and brought out the objections etc etc but it seems like a prima facie fix to me.
Yes, IMO the belief is “how may this text continue?” However, efficiently answering this question requires implicit background knowledge. In a similar sense, our brains may be said to only have information about “what perpetuates our existence” or “what makes us feel good.” At most we can be said to have knowledge of the electric potentials applied to our nerves, as Plato also made hay of. However, as with language models, a model of the unseen world arises as a side effect of the compression of sensory data.
Actually, language models are fascinating to me because they’re a second-order learner. Their model is entirely based on hearsay; GPT-3 is a pure gossip. My hope for the singularity is that language models will be feasible to make safe because they’ll unavoidably pick up the human ontology by imitation.
Yes, IMO the belief is “how may this text continue?”
That’s a question, not a belief – I assume you meant “This text may continue ”. This has the same problem: that’s a belief that you are projecting onto the model, not necessarily one that the model formulates. Reasoning by analogy is an attractive shortcut but it’s an uneasy one – we got gravity wrong because of it for almost two thousand years. Lots of things “may be said” about our brains, but not all of them are true, and not all of them apply to language models.
Sure, but by that metric everything that anyone has ever said is a belief that person is projecting. I think that language models match the pattern of having a belief, as I understand it.
a belief that you are projecting onto the model, not necessarily one that the model formulates
You’re mixing up meta-levels here: I believe that the model believes things. I’m not saying that we should believe that the model believes things because the model believes that; rather, (from my perspective) we should believe it because it’s true.
In other words, if I model the learning process of a language model, the model in my head of the process fits the categories of “belief” and “learning”.
I think that language models match the pattern of having a belief, as I understand it.
Observing that a model follows the pattern of a behaviour is not the same as observing that behaviour though. For example, Jupiter’s motion matches the pattern of orbiting a fixed Earth on an epicycle, but both are in fact orbiting the Sun.
FWIW, this is an even weaker assumption than I am making above – it’s not that no statements are made and that we only observe something akin to statements being made. I’m specifically arguing that the statements that the model appears to make (whether “it” makes them or not) are not particular enough to discriminate any information that the model holds about the world outside of itself and, thus, do not qualify as beliefs.
If the world had a different state, the model would have different beliefs - because the dataset would contain different content.
Also, Jupiter is in fact orbiting a fixed Earth on an epicycle. There is nothing that inherently makes that view less true than the orbiting-the-sun view. But I don’t see how that relates at all.
The problem is that reinforcement learning pushes the model toward reproducing the data distribution it was trained on. It’s completely orthogonal to truth about reality, in exactly the same way as guessing the state of the weather without evidence.
The data for language models in general is sampled from strings collected from websites, which includes true statements but also fiction, conspiracy theories, poetry, and just language in general. “Do you really think people would get on the Internet and tell lies” is one of the oldest jokes around for a reason.
You can ask GPT-3 what the weather is outside, and it’ll give you an answer that is structured like a real answer would be, but has no relation to the actual weather outside your location or whatever data centers collectively host the darned thing. It _looks_like a valid answer, but there’s no reason to believe it is one, and it’s dangerous to infer that anything like training on photo/weather pairs is happening when nobody built that into the actual model at hand.
Copilot in particular is no better - it’s more focused on code specifically, but the fact that someone wrote code does not mean that code is a correct or good solution. All Copilot can say is that it’s structured in a way that resembles other structures it’s seen before. That’s not knowledge of the underlying semantics. It’s useful and it’s an impressive technical achievement - but it’s not knowledge. Any knowledge involved is something the reader brings to the table, not the machine.
Oh I’ll readily agree that Copilot probably doesn’t generate “correct code” rather than “typical code.” Though if it’s like GPT-3, you might be able to prompt it to write correct code. That might be another interesting avenue for study.
“However, this code has a bug! If you look at line”…
I’ve experimented with this a bit and found it quite pronounced - if you feed copilot code written in an awkward style (comments like “set x to 1”, badly named variables) you will get code that reflects that style.
IMHO it’s perilous and not quite fair to think what a machine should be allowed to do and not to do by semantic convention. “Machine learning” was one uninspired grant writer away from going down into history as, say, “statistically-driven autonomous process inference and replication”, and we likely wouldn’t have had this discussion because anything that replicates code is radioactive for legal teams.
Copilot is basically Uber for copy-pasting from Stack Overflow. It’s in a legally gray area because the legal status of deriving works via statistical models is unclear, not because Microsoft managed to finally settle the question of what constitutes learning after all. And it’s probably on the more favourable side of gray shades because it’s a hot tech topic so it generates a lot of lobbying money for companies that can afford lawyers who can make sure it stays legally defensible until the next hot tech topic comes up.
Also, frankly, I think the question of whether what Copilot does constitutes learning or not is largely irrelevant, and that the question of whether Copilot-ing one’s code should be allowed is primarily rooted in entitlement. Github is Microsoft’s platform so, yes, obviously, they’re going to do whatever they can get away with on it, including things that may turn out to be illegal, or things that are illegal but will be deemed legal by a corrupt judge, or whatever. If someone wants $evil_megacorp to not do things with your code, why on Earth was their code anywhere near $evil_megacorp’s machines in the first place?
This cannot be a surprise to anyone who’s been in this field for more than a couple of years. Until a court rules otherwise, “fair” is whatever the people running a proprietary platform decide is fair. If anyone actually thought Github was about building a community and helping people do great things together or whatever their mission statement is these days, you guys, I have a bridge in Manhattan, I’m selling it super cheap, the view is amazing, it’s just what you need to take your mind off this Copilot kerfuffle, drop me a line if you wanna buy it.
(Much later edit: I know Microsoft is a hot topic in FOSS circles so just to be clear, lemme just say that I use Github and have zero problem with Copilot introducing the bugs that I wrote in other people’s programs :-D).
If machine learning was called “data replication”, it would be misnamed. And if it was called “pattern inference”, it would just be a synonym for learning… I wouldn’t care about Codex if I thought it was just a copypaste engine. I don’t think it is, though. Does it occasionally copypaste? Sure, but sometimes it doesn’t, and those are the interesting cases for me.
I don’t think this at all comes down to Github being Microsoft’s platform so much as Github being the biggest repo in one place.
I’m not at all defending Microsoft for the sake of Microsoft here, mind. I hate Microsoft and hope they die. I just think this attack does not hold water.
If machine learning was called “data replication”, it would be misnamed.
I beg to differ! Machine learning is a misnomer for statistically-driven autonomous process inference and replication, not the other way ’round!
I’m obviously kidding but what I want to illustrate is that you shouldn’t apply classical meaning to an extrapolated term. A firewall is neither a wall nor is it made of fire, and fire protection norms doesn’t apply to it. Similarly, just because it’s called machine learning, doesn’t mean you should treat it as human learning and apply the same norms.
I realize that. I want to underline that, while machine learning may be superficially analogous to human learning, just like a firewall is superficially analogous to a wall made of fire, it does not mean that it should be treated the same as human learning in all regards.
I don’t think it should be treated the same as human learning in all regards either. I think it’s similar to human learning in some ways and dissimilar in others, and the similarities are enough to call it “learning”.
Do you think Microsoft would be okay with someone training an AI on the leaked Windows source code and using it to develop an operating system or a Windows emulator?
Oh by no means will I argue that Microsoft are not hypocritical. I think it’s morally valid though, and whether Microsoft reciprocates shouldn’t enter into it.
Bit of a niggle, but it depends on the jurisdiction, really. Believe it or not, there exist jurisdictions where the Berne Convention is not recognized and as such it is perfectly legal to read it.
Exactly this. I think anthropomorphising abstract math executed in silicon is a trap for our emotional and ethical “senses”. We cannot fall for it. Machines and algorithms aren’t humans, aren’t even alive in any sense of the word, and this must inform our attitudes.
Machines aren’t humans. That’s fine, but irrelevant.
Machines aren’t alive. Correct, but irrelevant.
If the rule doesn’t continue to make sense when we finally have general AI or meet sapient aliens, it’s not a good rule.
That said, we certainly don’t have any human-equivalent or gorilla-equivalent machine intelligences now. We only have fuzzy ideas about how meat brains think, and we only have fuzzy ideas about how transformers match input to output, but there’s no particular reason to consider them equivalent. Maybe in 5 or 10 or 50 years.
If the rule doesn’t continue to make sense when we finally have general AI or meet sapient aliens, it’s not a good rule.
Won’t happen. If it does happen, we all die very soon afterwards.
I think the rule is good. We could come up with a different rule: oxygen in the atmosphere is a good thing. If we reach general AI or meet sapient aliens, they might disagree. Does that mean the rule was bad all along? I feel similar about anthropomorphising machines. It’s not in our ecological interest to do so.
I’m on board; however, I would, at least personally, make an exception if the machine-learned tool and it’s data/neural net were free, libre, and open source too. Of course the derivative work also needs to not violate the licenses too.
Learning is not covered by the GPL’s requirements.
For most intents and purposes, licences legally cover it as “creation of derived works”, otherwise why would “clean room design” ever exist. Just take a peek at the decompiled sources, you’re only learning after all.
I think this depends on the level of abstraction. There’s a difference in abstraction between learning and copying - otherwise, clean room design would itself be a derivative work.
I don’t understand what you mean. Clean-room implementation requires not having looked at the source of the thing you’re re-implementing. If you read the source code of a piece of software to learn, then come up with an independent implementation yourself, you haven’t done a clean-room implementation.
Cleanroom requires having read a documentation of the thing you are reimplementing. So some part of the sequence read -> document -> reimplement has to break the chain of derivation. At any rate, my contention is that training a neural network to learn a concept is not fundamentally different from getting a human to document a leaked source code. You’re going from literal code to abstract knowledge back down to literal code.
Would it really change your mind if OpenAI trained a second AI on the first AI in-between?
At any rate, my contention is that training a neural network to learn a concept is not fundamentally different from getting a human to document a leaked source code.
I think it’s quite different in the sense that someone reading the code’s purpose may come up with an entirely different algorithm to do the same thing. This AI won’t be capable of that - it is only capable of producing derivations. Sure, it may mix and match from different sources, but that’s not exactly the same as coming up with a novel approach. For example, unless there’s something like it in the source you feed it, I doubt the “AI” would be able to come up with Carmack’s fast inverse square root.
In copyright law, we have usually distinguished between an interface and an implementation. The difference there is always gonna be fuzzy, because law usually is. But with an AI approaches, there’s no step which distinguishes the interface and the implementation.
One problem here is the same sort of thing that came up in the Oracle/Google case — what do you do with things that have one “obvious” way to do them? If I’m the first person to write an implementation of one of those “obvious” functions in a given language, does my choice of license on that code then restrict everyone else who ever writes in that language?
And a lot (though of course not all) of the verbatim-copying examples that people have pointed out from Copilot have been on standard/obvious/boilerplate type code. It’s not clear to me that licensing ought to be able to restrict those sorts of things, though the law is murky enough that I could see well-paid attorneys arguing it either way.
I follow the philosophy of “let’s get to the catastrophe so we can move on”. This is one of those times. I truly hope the entire world switches to Chrome, experiences the downsides, and decides to finally do something about it. And the fastest way to get there is to tell everyone to use Chrome. So I do.
I’m struggling to see the logic here. What makes you convinced there is going to be a breaking point? To the extent anything in technology can be said to have a history, we have a long history of convincing ourselves that everything has to be the more or less the way it is now.
Everything has a breaking point. Literally everything, right up to black holes and down to particles. That’s pretty damn convincing!
I think the bigger question is whether most people would perceive any tangible downsides at all. If, as a user, I don’t view “Google uses my browsing history to do ad targeting” as a form of harm to me (and outside techie circles, it seems like a lot of people don’t) then what other downsides would cause me to want to take action?
Would really like to use it but when I tried it has some show stoppers for me still. The one I remember was the compose key not working in it.
Sadly, that makes it a non-option for me, too. Thanks for the heads-up.
My showstopper is no editor line wrap: https://github.com/lapce/lapce/issues/945
Without this it’s impossible to e.g. edit Markdown, something I do rather frequently in editors.
To bad some people are leaving comments in that issue that would make want to refuse to implement it just out of spite, if I were a developer.
It’s annoying to deal with some type of users that write demands, but worry not, we do want to implement line wrap, it’s just painfully hard to do so. Also I prefer to implement things out of spite, rather than not implementing them.
While I love soft-wrapping as much as the next person, what MD dialect doesn’t accept that the logical paragraph is separated by a newline? I.e. hard line breaks are fine. In fact, in CommonMark at least, you have to explicitly denote one with double trailing spaces.
Now, if you’re editing gemtext, you really want softwrap.
Short answer: I don’t care about what is possible in Markdown, I only care that my existing Markdown files were written with soft-wrapping, and I don’t feel like converting them. I can’t easily read my existing writing.
Thanks, that clears it up!
Also, that strategy quickly goes out of the window when you use a different font and/or size. Your future you will be happier with soft-wrapping, so will other people with other preferences and needs. Using newline for each sentence somewhat makes sense though as commits/diffs become slightly more meaningful.
I was on Team HardWrap, mostly because it’s so damn cool in Emacs to hit
M-q
, but now I just enable visual-line-mode and am happy. Supporting both is editor table stakes, though.Some good responses to this post on Mastodon:
– https://mastodon.social/@geerlingguy/110612337176962302
Also, worth reading Jeff Geerling’s response to the original post: https://www.jeffgeerling.com/blog/2023/im-done-red-hat-enterprise-linux
My two cents: I’ve seen a lot of people say that this is a perfectly predictable move by Red Hat, that in order to turn a profit companies will want to capture the value of their work. Sadly, this is textbook enshittification: a healthy ecosystem doesn’t let one company capture all of the value of a community, including a community built around open source software. The value of the community comes in part from letting other people and businesses enjoy some of the value that they are also contributing. Capturing more / too much of the value risks destroying the community, and if that happens, sadly in the end not only will Red Hat no longer be able to capture that value, the community will also lose the value that it contributed when the business+community dies or is killed by the corporation.
I don’t use RHEL or the now threatened clones, but… Seeing this power grab has made me nervous about all of the other stuff Red Hat is responsible for, directly or indirectly, including my primary computer’s current OS, Fedora, and the configuration management software behind all my web infrastructure, Ansible.
It really feels like the pace of enshittification has been accelerating lately, with Twitter, Reddit, and other entities I’ve relied on for years suddenly becoming so bad so quickly that it’s become intolerable for me.
Now let’s look at the actual wording in the blog post:
I don’t particularly agree with this statement, but it’s a quite different one from what Jeff Geerling is making it out to be. Sadly, a certain section of critics always resort to such tactics whenever an OSS company does something they don’t like.
This is a very confused mumbo-jumbo that sounds vaguely economic, but it’s not really. It takes five seconds of thought to realize there are other significant Linux distros, and Red Hat is nowhere near capturing the entire community.
How many of those distros managed to avoid adopting things that RedHat pushed on the ecosystem that were controlled by RedHat, such as PulseAudio and systemd?
Or like Pipewire so you can actually use the AAC codec with your Bluetooth headphones, damn Red Hat for improving the desktop experience.
Yeah… I’m no RH or RHEL fan but GNOME, PulseAudio, PipeWire, a number of Wayland-adjacent projects, including leaning-in on Firefox’s Wayland support… There’s a lot of things RH touches that I appreciate. I also worked at a large tech company and realize that the folks making the decisions about RHEL source availability are probably not the people spearheading these efforts, or even the ones setting technical direction.
yeah because bluetooth headphones are an improvement of the desktop experience.
Are you implying that they’re not? Because in fact, they are for me, I happen to use a desktop with BT headphones.
In other words–what you’re asking is, How many of those distros managed to avoid the free software and labour that Red Hat funded for them and the rest of the Linux community? Also, give it a rest about systemd already. It’s over and it won for a technical reason. It’s not some huge conspiracy theory.
You’re the one theorizing a conspiracy wherein Red Hat investors and managers act altruistically, against the economic incentives they would have to follow if they didn’t conspire.
What else could you mean by saying Red Hat does things “for them and the rest of the Linux community”?
So let me get this straight, according to you, I am saying that Red Hat (which has been an open source company from day one) is engaged in a conspiracy to do open source work. Did I understand right?
I am asking how else we should interpret “for them and the rest of the Linux community,” other than the idea that they acted altruistically, which would require a conspiracy.
Or DRI. The Direct Rendering Infrastructure and Direct Rendering Manager (DRI/DRM) are a joint effort from a bunch of contractors, including Red Hat. It was an open secret that kernel modesetting (KMS) was pushed in order to have a faster prettier boot screen for some unknown client of Red Hat; I remember standing next to the DRI/DRM maintainer while Linus yelled at him about this.
Those distros have only themselves to blame for those things, in particular. I’ll not shed tears for them.
I have a lot of sympathy with them. FreeBSD managed not to adopt these things but ended up having to do a lot of work. When a single company is pushing a vertically integrated solution and has enough developers to be able to upstream changes that add it as a dependency across a load of packages, it’s very hard to keep things working if you don’t adopt their solution.
My memory could be fuzzy, but I recall a lot of capitulation and even mockery of folks’ concerns in and by those distros. That said, I suppose you’ve got a point. :)
OTOH that work could be shared if major linux distros did not all capitulate.
I don’t think you’re actually saying what amount of value Red Hat was capturing, how much more it’s capturing now, and why you think the lower amount is correct. Calling it “enshittification” does not make an argument.
From the original article, emphasis mine:
16 machines is a pretty generous free license, definitely not a barrier to entry.
The barrier to entry is that automating the fetching of one of those licenses for a CI/CD system, then making sure you don’t run more than 16 of them in parallel (docker containers count as a license BTW, so it’s not even full VM’s). Then making sure you check that license back in.
On top of that the licensing system is fickle, and sometimes just doesn’t license a system or takes a while to do so, so now your CI/CD pipeline is sitting idle while RHEL sorts out its entitlement and gives you a certificate for use with their repositories to fetch the packages you need to run your compile/integration testing…
Lastly you are required to renew the license on a yearly basis and there is no automated way to do that, so every year your CI/CD pipeline will need to get updated with new secrets because it stops working.
None of those limitations existed with CentOS. I could easily grab the RPM’s I needed from a mirror, I could easily cache those packages (legally) and install them on a system without first having to register it as licensed. I didn’t have to figure out how to distribute the right license key for registering the system with RHEL in the first place and keeping it safe…
It’s not something that can’t be overcome and solved, it’s just an additional hurdle that you have to jump over, and yet one more thing that can go wrong/has to be debugged/tested/validated.
which is no barrier to a big company who would blow past the 16 system limit, but is a barrier instantly for small one-man teams.
I’d be interested in the backstory here: was Red Hat ever profitable before these changes? Did something stop them from turning a profit when they did before? Or did someone at IBM just decided they could be squeezed for more profit?
A quick search for their financial reports showed that, as of 2019, they were making quite large piles of money. I was quite surprised at how much revenue they had: multiple billions of dollars in revenue and a healthy profit from this.
It’s not clear to me the extent to which CentOS affected this. My guess is that, by being more actively involved for the past few years, they’ve made it easier to measure how many sales that get as a conversion from CentOS users and found that it’s peanuts compared to the number of people that use CentOS as a way of avoiding paying an RHEL subscription.
I didn’t see any post-acquisition numbers but I wouldn’t be surprised if they’re seeing some squeezes from the trend towards containerisation. Almost all Linux containers that I’ve seen use Ubuntu if they want something that looks like a full-featured *NIX install or Alpine or something else tiny if they want a minimal system as their base layer. These containers then get run in clouds on Linux VMs that don’t have anything recognisable as a distro: they’re a kernel and a tiny initrd that has just enough to start containerd or equivalent. None of this requires a RedHat license and Docker makes it very easy to use Windows or macOS as client OS for developing them. That’s got to be eroding their revenue (and a shame, because they’re largely responsible for the Podman suite, which is a much nicer replacement for Docker, but probably won’t make them any money).
I’d say they’re not hurting in the containerization space, with OpenShift as the enterprisey Kubernetes distro, quay as the enterprisey container registry, and the fact that they own CoreOS.
If you’re deploying into the cloud, you’re using the cloud provider’s distro for managing containers, not OpenShift. You might use quay, but it incurs external bandwidth charges (and latency) and so will probably be more expensive and slower than the cloud provider’s registry. I don’t think I’ve ever seen a container image using a CoreOS base layer, though it’s possible, but I doubt you’d buy a support contract from Red Hat to do so.
You’re missing that enterprises value the vendor relationship and the support. They can and will do things that don’t seem to make sense externally but that’s because the reasoning is private or isn’t obvious outside that industry.
I’ve never seen a CoreOS-based container but I’ve seen a lot of RHEL-based ones.
Possibly. I’ve never had a RHEL subscription but I’ve heard horror stories from people who did (bugs critical to their business ignored for a year and then auto closed because of no activity). Putting something that requires a connection to a license server in a container seems like a recipe for downtime.
I expect that big enterprise customers will not suffer stamping a license on every bare-metal host, virtual machine, and container. My experience is that connectivity outside the organization, even in public cloud, is highly controlled and curtailed. Fetching from a container registry goes through an allow-listed application-level proxy like Artifactory or Nexus, or through peculiarly local means. Hitting a license server on the public internet just isn’t going to happen. Beyond a certain size these organizations negotiate terms, among them all-you-can-eat and local license servers.
It’s going to be interesting.
Right over here https://www.redhat.com/en/technologies/management/satellite
All this is easily findable on the Internets, but the tl;dr - yes. Red Hat was profitable. That’s Red Hat’s job, to turn a profit. It’s also Red Hat’s job to remain profitable and try to grow its market share, and to try to avoid being made irrelevant, etc.
Being a public company means that shareholders expect not only profit, but continual growth. Whether that’s a reasonable expectation or healthy is a separate discussion, but that’s the expectation for public companies – particularly those in the tech space. IBM paid $34 billion for Red Hat and is now obliged to ensure that it was worth the money they paid, and then some.
If RHEL clones are eating into sales and subscription renewals, Red Hat & IBM are obliged to fix that. I don’t work at Red Hat anymore, but it’s no secret that Red Hat has a target every quarter for renewals and new subscriptions. You want renewals to happen at a pretty high rate, because it’s expensive to sign new customers, and you want new subscriptions to happen at a rate that not only preserves the current revenue but grows it.
That’s the game, Red Hat didn’t make those rules, they just have to live by them.
Another factor I mean to write about elsewhere soon is the EOL for EL 7 and trying to ensure that customers are moving to RHEL 8/9/10 and not an alternative. When CentOS 7 goes EOL anybody on that release has to figure out what’s next. Red Hat doesn’t have any interest in sustaining or enabling a path to anything other than RHEL. In fact they have a duty to try to herd as many paying customers as possible to RHEL.
So it isn’t about “aren’t they making a profit today?” It’s about “are they growing their business and ensuring future growth sufficiently to satisfy the shareholders/market or not?”
My guess is that revenue was expected to start declining. Density of deployments has been rising rapidly since Xen and VServer came. Red Hat had to adjust pricing to cope multiple times, but I don’t believe they were able to track the trend.
Nowadays with containers, the density is even higher. We are at PHP shared hosting level density, but for any stack and workload. For simple applications, costs of running them are approaching the cost of the domain name.
Instead of fleet of 10 servers, each with their own subscription (you had in 2005-2010 with RHEL 4 & 5), you now have just 2U cluster with a mix of VMs and containers, with just two licenses.
And sometimes not even that. People just run a lightweight OS with Docker on top pretty frequently.
This is a band-aid on a bleeding wound, I believe.
They should be pursuing some new partnerships. It’s weird that e.g. Steam Deck is not running an OS from Red Hat. Or that you can’t pay a subscription for high quality (updated) containers running FLOSS, giving a portion of the revenue to the projects.
The Steam Deck might be a poor business case for Red Hat or Valve. Since the Steam Deck hardware is very predictable and it has a very specific workload, I don’t know if it would make sense to make a deal with Red Hat to support it. It would be a weird use case for RHEL/Red Hat, too, I think. At least it would’ve when I was there - I know Red Hat is trying to get into in-vehicle systems so there might be similarities now.
I am not saying Red Hat should be trying to support RHEL on a portable game console. It should have been able to spin a Fedora clone and help out with the drivers, graphics and emulation, though.
Somebody had to do the work and they made profits for someone else.
Concentrating on Java for banks won’t get them much talent and definitely won’t help get them inside the next generation of smart TVs that respect your privacy. Or something.
One business case for Red Hat would be a tremendous install base, which would increase the raw number of people reporting bugs to Fedora or their RHEL spin. And that in turn could led IVI vendors to have really battle tested platorm+software combo. Just don’t let them talk directly to the normal support other companies are paying for.
My understanding is that Canonical has benefitted hugely from WSL in this regard. It’s practically the default Linux distro to run on WSL. If you want to run Linux software and you have a Windows machine, any tutorial that you find tells you how to install Ubuntu. That’s a huge number of users who otherwise wouldn’t have bothered. Ubuntu LTS releases also seem to be the default base layers for Mose dev containers, so if you open a lot of F/OSS repos in VS Code / GitHub Code Spaces, you’ll get an Ubuntu VM to develop in.
For a similar program written in Rust, check out https://github.com/vvilhonen/nethoscope
TLDR: Maybe your names are bad if your (generally happy) users keep misnaming your thing.
Old neckbeards (like me) generally just think in two categories: window managers (paint windows) and more batteries-included (have a taskbar, and some other stuff). That’s it, it’s either a window manager or a desktop environment. If it’s really so unique it warrants a new name it better not look and feel like “just” like a DE.
They could start by picking a name that doesn’t, you know, involve “DE”.
I propose a new name: KINDE. KINDE Is Not a Desktop Environment.
Came here to post something along these lines
I think of a desktop environment as a lot more than a window manager. It also includes a widget set and a coherent set of user interface guidelines, a set of core GUI tools (e.g. a file manager), and services to support these applications. This is why GNOME and KDE are desktop environments but AfterStep and WindowMaker are not.
KDE provides far more than a window manager and a taskbar, it provides a set of Qt views for things, a component architecture, and so on. Plasma will happily manage windows for GNOME applications or things that don’t target a specific DE, such as XMMS, but KDE applications will often not work without a bunch of the KDE infrastructure.
Interesting distinction. I haven’t tried running it in a long time, but I remember I had to launch Nautilus with the
--no-desktop
flag, otherwise it would literally come with a GNOME desktop along! If this has changed, I’d say it’s because it’s better designed now, not because it went from being a not-DE to a DE.Anyway, that’s just semantics. The meat of the article that gets lost in the provocative title is “look at how flexible KDE actually is!”, which is fun to see. Functionally, I’m not sure how much that matters, except in an alternate reality where something like Ubuntu Touch actually took off and we used our pocket computers like the powerful computers they actually are.
That’s not what I mean as a DE. Nautilus is part of a DE, but the fact that GNOME has standardised file pickers, standardised dialogs for a bunch of other things, a consistent look and feel across applications, a set of services that applications can depend on (many of these are now exposed via XDG interfaces and so can be replaced with non-GNOME ones) is what makes GNOME a DE not just a window manager and a bunch of applications.
It’s weird to use this title for a link that is not directly to Derek Sivers himself, but rather a blog quoting his post. To skip the intermediary, here’s Derek Sivers: https://sive.rs/openbsd
Taking money from cryptocurrency companies is not what I would call ethical behavior :(
I mean… if you hate crypto companies, presumably it’s a good thing to funnel money out of those companies and into charitable causes.
Presumably, they gain more from employing you than you charge them. So working for them helps them grow.
I can’t agree with this. I think it is worse to take money from unethical sources than to give them money.
If someone is taking money from you, you have a financial incentive to figure out a way to not have to pay them money. If someone is giving you money, you have a monetary incentive to help them become more successful and wealthy so they can give you more money. This warps your incentives and tends to make you agree with, support and defend the entity you’re taking money from.
People are aware of this and will trust you less if you take money from an unethical source.
Disclaimer: I work for Protocol Labs, but they’re very unlike any other ‘cryptocurrency company’ I know - fully open source, fully open research (not about patents), and we develop and maintain plenty of other projects that aren’t related to cryptocurrency per se (IPFS being the prime example, libp2p, a bunch of other go stuff)
Sounds ethical to me. Better than the
peoplescammers at the top of the pyramid scheme walking away with all of it, as usual.This was almost 10 months in the making, with 2 attempts and coming back from the PR being closed by Stalebot multiple times. So glad it’s finally done.
I hate stale bots so much. They generate way too much noise and make it hard to work on larger, longer features.
Exactly. Make use of sorting/filters/labels instead.
One more argument for leaving GitHub! I haven’t seen stale bots on any of the FOSS code forges yet, and maybe we can build a culture that has better ways of dealing with the (entirely valid) problems of overwhelmed and demotivated maintainers.
They are a necessary evil, especially for a project like Serenity. People love to invent, or port a feature or some grand refactoring, and then they get tired of it and leave their work to rot forever. The serenity stale bot as closed ~500 PRs over it’s life time that were left with no activity for over a month.
In my opinion, pull requests that are not ready for review (i.e. drafts or failing CI checks), are fair game to be closed as stale. However, bug reports, feature requests, and PRs that pass CI checks should remain open until they get attention from a maintainer.
I totally agree with that. We explicitly don’t enable stale bot for any issues, only PRs. There have been cases where PRs slipped through the cracks in SerenityOS and stale bot happened to close them. It’s just one click to bring them back and get them merged, so it always seemed like a reasonable trade-off to me. The community is generally watching for what stale bot reaps and have been good about raising anything that should be given attention.
Then you have a good community and I’m glad that it works for you. A wasteland of open-but-stale stuff is no fun to wade through.
I think the Raspberry Pi 400 is/was an interesting nod in the direction of a keyboard-first computer, but sadly it doesn’t look like a very good keyboard: https://hackaday.com/2020/11/02/new-raspberry-pi-400-is-a-computer-in-a-keyboard-for-70/
I’d love to see what e.g. Keyboardio would do with the concept, with a split mechanical keyboard, open hardware, and high quality components.
I think everyone’s experience is going to be different, this is all highly subjective depending on what communities you want to interact with. That being said, I’m very pleasantly surprised at how smoothly the transition to Mastodon has gone for my professional/programming feed.
I’m shocked that it worked (~70% of people I follow have moved to Mastodon, and it’s more active than Twitter now). It’s like the year of Linux desktop happening.
It turns out all we need for the year of the Linux desktop to happen is for Elon Musk to buy a major competitor, say, Microsoft, or Apple. Doesn’t seem likely, but neither does a lot of stuff that is definitely happening in our timeline.
Maybe there is someone else (incredibly rich yet wildly incompetent and detached from reality) who could do Linux a similar service? It doesn’t literally have to be Elon Musk, it’s clear that wealth does not correlate with any ability or positive qualities whatsoever, there’s got to be hundreds of other (less famous?) plutocrats who also have the potential to destroy anything they touch. Thiel? DHH? Maybe a young con artist in the tradition of Theranos or FTX could convince investors to fund their joyride in the crumbling shell of a previously productive corporation.
0% chance. Elon Musk bought Twitter for $44 billion. Apple and Microsoft are worth way more than that.
Apple market cap: $2.29 trillion (52 Twitters)
Microsoft market cap: $1.80 trillion (41 Twitters)
Even assuming either company would consider privatizing (they wouldn’t), even the top 10 richest people pooling their net worth couldn’t buy either of them.
I’m on the one hand happy that it worked, but the move for me has been… spotty. Essentially my whole tech timeline moved, so that’s fine.
But I actively used Twitter to get into community I am very curious about. I have family in Botswana and so I used Twitter to stay up to speed on what happens in the region. All that migrated to about 0% and that’s a huge loss for me.
I need to check it out again. When I’ve tried it in the past, it always felt like a bunch of people and bots shouting into the void–lots of content, but very little dialogue.
Twitter isn’t really a medium for dialogue anyway…
Well, it’s not a platform that optimizes for constructive dialogue, so maybe a less ambiguous term would be “engagement”: there is a lot of engagement on Twitter, but very little on Mastodon (IME).
Anecdotally, the Twitter Migration has caused a qualitative change, for better or worse. There is tons of dialogue on my instance.
My biggest challenge right now is that my instance got too popular I guess and now is constantly down. :(
What’s the bottleneck? Database? Web server? Something else?
Oh sorry I meant the instance I’m on. That is, I don’t know what the problem is.
If you’re active on Twitter I can recommend using one of the services that checks if your followers are also on a Fediverse instance, and allow you to easily import them.
Just wanted to say hi, I’m one of the co-founders of this effort and would be happy to discuss.
Looks like it’s not working with Firefox. Are there plans to support other browsers in the future?
https://bugzilla.mozilla.org/show_bug.cgi?id=1631263 is the tracking issue on mozilla’s side to support insertable streams
Unfortunately Firefox doesn’t support Insertable Streams, which is the WebRTC standard we (and others) use to provide video/audio encryption. I believe it’s on Firefox’s roadmap, but it’s not available yet. So for now users would have to use a chromium-based browser such as Chrome, Vivaldi, Brave, Edge, etc.
Are any aspects of this open source software?
Yes. It’s built on livekit (client/server) which we’ve made light changes to, and then it goes through our network infrastructure and Fastly’s network infrastructure.
Can someone please explain the pros and cons of wiring your home with fiber? This article seems to skip explaining why they are going to the trouble of doing this.
Pros:
Cons:
If I were doing a new build, I’d be very tempted to lay fibre and cat6, so that I never have to think about it ever again.
you also can’t do PoE for things like cameras or access points.
Very minor nitpick – I believe 2.5GbE and 5GbE were designed to run on Cat-5e and Cat-6 respectively.
ref: https://en.wikipedia.org/wiki/2.5GBASE-T_and_5GBASE-T#Technology
You can actually even do 10GbE over Cat-5e if the run is short enough.
From what I can tell, if you already have SFP slots, optical transcievers are cheaper. For example
IMO the biggest downside is that fiber is more of a pain to work with. You can unplug/replug your copper cables as much as you want, but you have to be careful not to scratch your fiber connectors or bend the cable (yes, I know you can also kink a copper cable).
Thanks. It’s been a little while since I looked and the price for the optical transceivers has come down by over an order of magnitude since then.
If you’re concerned about EMI (i.e. TEMPEST), then fibre also doesn’t have those emissions. The US federal government deploys a lot of fibre for that reason.
In case you happen to be a ham — fiber is RFI-immune. Longer copper ethernet runs can be prone to radiating wideband noise, as well as receiving RFI from nearby transmitters (which then degrades the network connection). Using shielded twisted pair is an option, but it’s nearly as expensive as fiber, and nearly as annoying to terminate as fiber. And, existing OM4 or OM5 fiber looks like it will manage 100Gbit links over in-house distances, which makes it more future-proof than Cat6A or even Cat8.
Apparently they have a 25gbit connection so I guess you need this to even begin to take advantage of it.
Seems like a crazy amount of bandwidth though - 25gbit, 10gbit AND a 5G backup.
isn’t this too fast to write on a regular SSD? if we take the 550MB/s write speed, how would you benefit from a 25gbit connection?
Use the memory. And Init7 charges the same amount for 1G, 10G and 25G
There’s plenty of usages I can think of that wouldn’t involve writing that to disk. Mostly to do with raw video transmission. Security systems, playing video games in a central beefy computer from a portable peripheral (Steam and Playstation support this), keeping video in a NAS and editing from around the house…
But yeah, that’s a ton of bandwidth.
Here i am with my only option being a cable connection. I don’t use the fastest at 400/40mbit, but higher speed plans only give me more download.
I use a 4G sim card here because the ADSL is so slow!
I have friends in more rural areas where 4G is better than anything wired they can get. i understand your pain.
The thread on LKML about this work really doesn’t portray the Linux community in a good light. With a dozen or so new kernels being written in Rust, I wouldn’t be surprised if this team gives up dealing with Linus and goes to work on adding good Linux ABI compatibility to something else.
I dunno, Linus’ arguments make a lot of sense to me. It sounds like he’s trying to hammer some realism into the idealists. The easter bunny and santa claus comment was a bit much, but otherwise he sounds quite reasonable.
Disagreement is over whether “panic and stop” is appropriate for kernel, and here I think Linus is just wrong. Debugging can be done by panic handlers, there is just no need to continue.
Pierre Krieger said it much better, so I will quote:
One argument I can accept is that this should be a separate discussion, and Rust patch should follow Linux rule as it stands, however stupid it may be.
I think the disagreement is more about “should we have APIs that hide the kernel context from the programmer” (e.g. “am I in a critical region”).
This message made some sense to me: https://lkml.org/lkml/2022/9/19/840
Linus’ writing style has always been kind of hyperbolic/polemic and I don’t anticipate that changing :( But then again I’m amazed that Rust-in-Linux happened at all, so maybe I should allow for the possibility that Linus will surprise me.
This is exactly what I still don’t understand in this discussion. Is there something about stack unwinding and catching the panic that is fundamentally problematic in, eg a driver?
It actually seems like it would be so much better. It recovers some of the resiliency of a microkernel without giving up the performance benefits of a monolithic kernel.
What if, on an irrecoverable error, the graphics driver just panicked, caught the panic at some near-top-level entry point, reset to some known good state and continued? Seems like such an improvement.
I don’t believe the Linux kernel has a stack unwinder. I had an intern add one to the FreeBSD kernel a few years ago, but never upstreamed it (*NIX kernel programmers generally don’t want it). Kernel stack traces are generated by following frame-pointer chains and are best-effort debugging things, not required for correctness. The Windows kernel has full SEH support and uses it for all sorts of things (for example, if you try to access userspace memory and it faults, you get an exception, whereas in Linux or FreeBSD you use a copy-in or copy-out function to do the access and check the result).
The risk with stack unwinding in a context like this is that the stack unwinder trusts the contents of the stack. If you’re hitting a bug because of stack corruption then the stack unwinder can propagate that corruption elsewhere.
With the objtool/ORC stuff that went into Linux as part of the live-patching work a while back it does actually have a (reliable) stack unwinder: https://lwn.net/Articles/728339/
That’s fascinating. I’m not sure how it actually works for unwinding (rather than walking) the stack: It seems to discard the information about the location of registers other than the stack pointer, so I don’t see how it can restore callee-save registers that are spilled to the stack. This is necessary if you want to resume execution (unless you have a setjmp-like mechanism at the catch site, which adds a lot of overhead).
Ah, a terminological misunderstanding then I think – I hadn’t realized you meant “unwinding” specifically as something sophisticated enough to allow resuming execution after popping some number of frames off the stack; I had assumed you just meant traversal of the active frames on the stack, and I think that’s how the linked article used the term as well (though re-reading your comment now I realize it makes more sense in the way you meant it).
Since AFAIK it’s just to guarantee accurate stack backtraces for determining livepatch safety I don’t think the objtool/ORC functionality in the Linux kernel supports unwinding in your sense – I don’t know of anything in Linux that would make use of it, aside from maybe userspace memory accesses (though those use a separate ‘extable’ mechanism for explicitly-marked points in the code that might generate exceptions, e.g. this).
If I understand the userspace access things correctly, they look like the same mechanism as FreeBSD (no stack unwinding, just quick resumption to an error handler if you fault on the access).
I was quite surprised that the ORC[1] is bigger than DWARF. Usually DWARF debug info can get away with being large because it’s stored in separate pages in the binary from the file and so doesn’t consume any physical memory unless used. I guess speed does matter for things like DTrace / SystemTap probes, where you want to do a full stack trace quickly, but in the kernel you can’t easily lazily load the code.
The NT kernel has some really nice properties here. Almost all of the kernel’s memory (including the kernel’s code) is pageable. This means that the kernel’s unwind metadata can be swapped out if not in use, except for the small bits needed for the page-fault logic. In Windows, the metadata for paged-out pages is stored in PTEs and so you can even page out page-table pages, but you can then potentially need to page in every page in a page-table walk to handle a userspace fault. That extreme case probably mattered a lot more when 16 MiB of RAM was a lot for a workstation than it does now, but being able to page out rarely-used bits of kernel is quite useful.
In addition, the NT kernel has a complete SEH unwinder and so can easily throw exceptions. The SEH exception model is a lot nicer than the Itanium model for in-kernel use. The Itanium C++ ABI allocates exceptions and unwind state on the heap and then does a stack walk, popping frames off to get to handlers. The SEH model allocates them on the stack and then runs each cleanup frame, in turn, on the top of the stack then, at catch, runs some code on top of the stack before popping off all of the remaining frames[2]. This lets you use exceptions to handle out-of-memory conditions (though not out-of-stack-space conditions) reliably.
[1] Such a confusing acronym in this context, given that the modern LLVM JIT is also called ORC.
[2] There are some comments in the SEH code that suggest that it’s flexible enough to support the complete set of Common Lisp exception models, though I don’t know if anyone has ever taken advantage of this. The Itanium ABI can’t support resumable exceptions and needs some hoop jumping for restartable ones.
What you are missing is that stack unwinding requires destructors, for example to unlock locks you locked. It does work fine for Rust kernels, but not for Linux.
Does the kernel have unprotected memory and just rolls with things like null pointer dereferences reading garbage data?
For errors that are expected Rust uses
Result
, and in that case it’s easy to sprinkle the code withresult.or(whoopsie_fallback)
that does not panic.As far as I understand, yeah, sometimes the kernel would prefer to roll with corrupted memory as far as possible:
(from docs and linked mail).
null derefernces in particular though usually do what BUG_ON essentially does.
And things like out-of-bounds accesses seem to end with null-dereference:
https://github.com/torvalds/linux/blob/45b588d6e5cc172704bac0c998ce54873b149b22/lib/flex_array.c#L268-L269
Though, notably, out-of-bounds access doesn’t immediately crash the thing.
That’s what I got from the thread and I don’t understand the attitude at all. Once you’ve detected memory corruption then there is nothing that a kernel can do safely and anything that it does risks propagating the corruption to persistent storage and destroying the user’s data.
Linus is also wrong that there’s nothing outside of a kernel that can handle this kind of failure. Modern hardware lets you make it very difficult to accidentally modify the kernel page tables. As I recall, XNU removes all of the pages containing kernel code from the direct map and protects the kernel’s page tables from modification, so that unrecoverable errors can take an interrupt vector to some immutable code that can then write crash dumps or telemetry and reboot. Windows does this from the Secure Kernel, which is effectively a separate VM that has access to all of the main VM’s memory but which is protected from it. On Android, Halfnium provides this kind of abstraction.
I read that entire thread as Linus asserting that the way that Linux does things is the only way that kernel programming can possibly work, ignoring the fact that other kernels use different idioms that are significantly better.
Reading this thread is a little difficult because the discussion is evenly spread between the patch set being proposed, some hypothetical plans for further patch sets, and some existing bad blood between the Linux and Rust community.
The “roll with corrupted memory as far as possible” part is probably a case of the “bad blood” part. Linux is way more permissive with this than it ought to be but this is probably about something else.
The initial Rust support patch set failed very eagerly and panicked, including on cases where it really is legit not to panic, like when failing to allocate some memory in a driver initialization code. Obviously, the Linux idiom there isn’t “go on with whatever junk pointer
kmalloc
gives you there” – you (hopefully – and this is why we should really root for memory safety, because “hopefully” shouldn’t be a part of this!) bail out, that driver’s initialization fails but kernel execution obviously continues, as it probably does on just about every general-purpose kernel out there.The patchset’s authors actually clarified immediately that the eager panics are actually just an artefact of the early development status – an
alloc
implementation (and some bits ofstd
) that follows safe kernel idioms was needed, but it was a ton of work so it was scheduled for later, as it really wasn’t relevant for a first proof of concept – which was actually a very sane approach.However, that didn’t stop seemingly half the Rustaceans on Twitter to take out their pitchforks, insists that you should absolutely fail hard if memory allocation fails because what else are you going to do, and rant about how Linux is unsafe and it’s riddled with security bugs because it’s written by obsolete monkeys from the nineties whose approach to memory allocation failures is “well, what could go wrong?” . Which is really not the case, and it really does ignore how much work went into bolting the limited memory safety guarantees that Linux offers on as many systems as it does, while continuing to run critical applications.
So when someone mentions Rust’s safety guarantees, even in hypothetical cases, there’s a knee-jerk reaction for some folks on the LKML to feel like this is gonna be one of those cases of someone shitting on their work.
I don’t want to defend it, it’s absolutely the wrong thing to do and I think experienced developers like Linus should realize there’s a difference between programmers actually trying to use Rust for real-world problems (like Linux), and Rust advocates for whom everything falls under either “Rust excels at this” or “this is an irrelevant niche case”. This is not a low-effort patch, lots of thinking went into it, and there’s bound to be some impedance mismatch between a safe language that tries to offer compile-time guarantees and a kernel historically built on overcoming compiler permisiveness through idioms and well-chosen runtime tradeoffs. I don’t think the Linux kernel folks are dealing with this the way they ought to be dealing with it, I just want to offer an interpretation key :-D.
No expert here, but I imagine linux kernel has methods of handling expected errors & null checks.
In an ideal world we could have panic and stop in the kernel. But what the kernel does now is what people expect. It’s very hard to make such a sweeping change.
Sorry, this is a tangent, but your phrasing took me back to one of my favorite webcomics, A Miracle of Science, where mad scientists suffer from a “memetic disease” that causes them to e.g. monologue and explain their plans (and other cliches), but also allows them to make impossible scientific breakthroughs.
One sign that someone may be suffering from Science Related Memetic Disorder is the phrase “in a perfect world”. It’s never clearly stated exactly why mad scientists tend to say this, but I’d speculate it’s because in their pursuit of their utopian visions, they make compromises (ethical, ugly hacks to technology, etc.), that they wouldn’t have to make in “a perfect world”, and this annoys them. Perhaps it drives them to take over the world and make things “perfect”.
So I have to ask… are you a mad scientist?
I aspire to be? bwahahaa
Hah, thanks for introducing me to that comic! I ended up archive-bingeing it.
What modern kernels use “panic and stop”? Is it a feature of the BSDs?
Every kernel except Linux.
I didn’t exactly mean bsd. And I can’t name one. But verified ones? redox?
I’m sorry if my question came off as curt or snide, I was asking out of genuine ignorance. I don’t know much about kernels at this level.
I was wondering how much an outlier the Linux kernel is - @4ad ’s comment suggests it is.
No harm done
I agree. I would be very worried if people writing the Linux kernel adopted the “if it compiles it works” mindset.
Maybe I’m missing some context, but it looks like Linus is replying to “we don’t want to invoke undefined behavior” with “panicking is bad”, which makes it seem like irrelevant grandstanding.
The part about debugging specifically makes sense in the “cultural” context of Linux, but it’s not a matter of realism. There were several attempts to get “real” in-kernel debugging support in Linux. None of them really gained much traction, because none of them really worked (as in, reliably, for enough people, and without involving ritual sacrifices), so people sort of begrudgingly settled for debugging by printf and logging unless you really can’t do it otherwise. Realistically, there are kernels that do “panic and stop” well and are very debuggable.
Also realistically, though: Linux is not one of those kernels, and it doesn’t quite have the right architecture for it, either, so backporting one of these approaches onto it is unlikely to be practical. Linus’ arguments are correct in this context but only insofar as they apply to Linux, this isn’t a case of hammering realism into idealists. The idealists didn’t divine this thing in some programming class that only used pen, paper and algebra, they saw other operating systems doing it.
That being said, I do think people in the Rust advocacy circles really underestimate how difficult it is to get this working well for a production kernel. Implementing panic handling and a barebones in-kernel debugger that can nonetheless usefully handle 99% of the crashes in a tiny microkernel is something you can walk third-year students through. Implementing a useful in-kernel debugger that can reliably debug failures in any context, on NUMA hardware of various architectures, even on a tiny, elegant microkernel, is a whole other story. Pointing out that there are Rust kernels that do it well (Redshirt comes to mind) isn’t very productive. I suspect most people already know it’s possible, since e.g. Solaris did it well, years ago. But the kind of work that went into that, on every level of the kernel, not just the debugging end, is mind-blowing.
(Edit: I also suspect this is the usual Rust cultural barrier at work here. The Linux kernel community is absolutely bad at welcoming new contributors. New Rust contributors are also really bad at making themselves welcome. Entertaining the remote theoretical possibility that, unlikely though it might be, it is nonetheless in the realm of physical possibility that you may have to bend your technology around some problems, rather than bending the problems around your technology, or even, God forbid, that you might be wrong about something, can take you a very long way outside a fan bulletin board.)
Wow, Linus really has mellowed over the years ;)
Nobody here has addressed the obvious response here: if RMS is deadweight, and the FSF are permanently chained to him, then the solution is a separate organization.
Which begs the question: which?
I think the Software Freedom Conservancy is one of the closest successor organizations, since it has experience enforcing GPL compliance. https://sfconservancy.org/
I’ve also enjoyed some of their recent actions, such as the Give Up GitHub campaign. I think they embody a lot of the same ethics without the baggage (RMS).
But they are a different org and do not have an identical mission or the same capabilities, and cannot be considered a direct replacement.
I dunno, I feel the FLOSS community interprets RMS+FSF as damage, and routes around it.
Multiple thousands of people do not. Maybe there are enough people who do that we’re okay? But we won’t really know until it’s too late.
The fact we’re celebrating hackish extensions on top of TTYs is a sign of the myopia in our industry. We have all these great ways to render any kind of interface (even 1980’s bitmaps are an improvement), command line or not, and we just consider 1977 state of the art to be perfect.
While I think it’s valid to criticize “back to the future” efforts to revitalize the command line instead of doing something new, I’d like to see more efforts to replicate the strengths of the command line in new UIs. I like this summary of the command line’s advantages:
Any GUI that fulfilled these requirements as well as a TTY would be a force to be reckoned with, at least with the vital programmer demographic. You can see some successful efforts to bring these into the GUI world, such as Spotlight harnessing the power of the keyboard for desktop search, but generally this is underexplored territory IMHO.
I’ll also echo @bsandro’s advantages of standardization, portability (between windowing systems and OSes), and remote connection (via SSH).
In the absence of efforts to replicate the command line’s strengths, I will continue to invest time and energy into command line and TUI software.
Command lines and GUIs aren’t a dichotomy - things from CLIM to Mathematica should make this known. Even within more commodity things, command palettes, AppleScript/Shortcuts/OSA, and the fact Windows is fully keyboard navigable make this already addressed.
And as much as I don’t like Pike, I have to agree with his studies on keyboard and mouse, where the mouse was found to be actually faster, even if it didn’t feel like it. With newer HID, that leads to me swiping on the trackpad to switch workspaces instead of going for the keyboard. With future HID, who knows what’s next?
I’m creating apps that enable faster interaction with medical software by using the Windows automation. I assure you this is not the case and I’m trying really hard to use the accessibility/Windows apis, before attempting to use keyboard, before resorting to “look for this and that field and click between them + about 5px to the right”. It’s uncommon, but still way more common than it should be.
What about the Oberon interface, which was a very strong influence on Plan 9 and Acme? I’d say those are both GUIs that meet all of those requirements, with the possible exception of the first one (people have forked Acme and added more keyboard-only control but I’m not sure it caught on, possibly because that advantage isn’t really real).
@calvin also pointed me at Apollo’s Domain/OS a while ago: there are some similar interface ideas in there too.
That’s the problem, really. Within little niches, people are already using alternative interfaces. They just never make it to the mainstream as they aren’t compatible with the lowest common denominator.
kinda sucks that rendering proportional fonts in a terminal today is at best a hack, too. I just really dislike reading monospace prose 😔
I woke up one day and realised this, so now I run gtk+ emacs. There are upsides and no real downsides
It’s depressing, isn’t it? Everyone would rather cosplay a 1970s mainframe wizard than consider what a 21st century interface could be.
Well, not everyone. We also have people using GUI IDEs from the ‘90s. I don’t know what would be better but I think it’s a shame that nothing new has appeared for a while now.
I wonder if we’re stuck at a lowest common denominator? I’ve seen some cool programming interfaces for Smalltalk but that’s no good unless you’re using Smalltalk. Are we stuck because everything has to be cross-platform and language-agnostic?
One of the recent articles on here really resonated with me, about how desktop GUIs got lost after the advent of tablets fooled them into wanting to merge the two ways of interacting. It explains why there’s so much interest in terminals and 90s GUIs: we’re looking for things that fit laptops/desktops better than the current bad tablet-oriented compromises. Maybe we’re stuck in a dead-end, and by rewinding to GUIs that worked well, we can break out and start improving things again.
The “tabletification” tends to be overblown, and the retrofetishism started long before.
It sounds like you consider more pixels to be better, or perhaps more arbitrary layouts of information.
While the terminal isn’t perfect, it seems a lot of people find it very powerful and useful. I’d love to see your prototype of a better system. Would it be something like a Jupiter notebook for shell? Or what ?
Are bitmaps better though? I can’t think of a system that’s better than terminal for everything. (I’m excluding actual images of course) Specific cases, sure, but even though I’m using vscode, half the time I’ve got a terminal panel open inside it.
When things are outside the terminal, I normally run into this issue: how do I filter / reuse / compose this information? For example, I’ll take lshw / lspci over a Windows device info app because it’s so much more useful. Sure, we could do better and there are ideas like powershell and other shells that try to present structured outputs. I keep trying those and finding out they’re just not convenient enough to be worth switching.
I disagree that it’s an industry myopia - there’s a new project trying to improve the situation every week. None have really succeeded as far as I can tell. There’s a chance we’re really at the global maximum right now with the idea of “pretty text in a grid for interactive use + a flag for structured output + bitmaps for very specific things that require bitmaps”, yet we’re still able to constantly improve on that with various implementations.
What if you could just execute a shell command from within VS Code? For example, suppose you could select any text in any tab or panel, then right-click and choose “Run in shell” or something similar. Then you’d get the result as editable text in a new tab. Or maybe you could select any text and pipe it into stdin for an arbitrary shell command, with an option to replace the selected text with the result. Or the selected text could be the arguments to a shell command. You’d get all the flexibility of textual commands and outputs, with all the ability to filter / reuse / compose results, but integrated into your editor, rather than having to copy & paste things to and from a separate terminal panel.
Maybe there’s a VS Code extension that does this, I have no idea. I just wonder if it’s really the terminal that you want, or is it the ability to compose commands and munge their output?
I don’t think that would be helpful (for me). Issues: already too many tabs, how to handle interactive commands, how to handle binary input/output, how to handle command history, how to handle huge/streaming/ephemeral data? Also, previous output / task context wouldn’t be visible. Once in a while I do want the output in a tab… so I redirect to /tmp/foo and ctrl-click it in the terminal panel - solves 99% of what you describe without requiring a redo of the whole system.
Running the selection as a command already exists as “workbench.action.terminal.runSelectedText”.
This, but the new system would have to do it better than the plain terminal solution.
I like that you call it “the plain terminal solution” - to me, embedding a whole terminal emulator seems much more complicated than the “plain” solution :)
Regarding the other issues, I’m not sure why the terminal solves any of them better than a normal text editor window - except the interactive commands, I guess. But I’m not trying to convince you of the merit of my entirely hypothetical vscode extension, just trying to work out if it’s really a terminal emulator that you want rather than specifically the ability to run and manipulate shell commands.
The article is about using terminal escape sequences to build TUIs, which seems like a weird thing to want in a panel inside a real GUI application like VS Code.
I think there is another benefit that make the terminal more appealing than that hypothetical extension and I see it rarely mentioned. The command line offers a very strict chronological command/response interaction. A new command is placed at the bottom, older stuff moves up.
This means that I have a clear overview of history, with specific information of all the steps. This command resulted in that output. It also follows one thread of history per terminal. So while one can do things in parallel, nothing gets “lost” running in the background.
That historical overview is for instance what is missing from Jupiter notebooks and I find them always very confusing to work with when I need to do more than just follow the steps from top to bottom.
I completely agree! Although I think that’s an argument against this sort of terminal interface…
The problem is the overloading of the word “terminal”. Although the article is called The Renaissance of the Command Line, it’s really more about TUIs: the
ncurses
style of interface that uses terminal escape sequences. Likewise, the top comment in this thread is about rendering interfaces using “hackish extensions on top of TTYs”. When you use that sort of interface, you lose your history in the terminal. You can’t scroll up and see exactly what thatvim
command did.Obviously, you can’t “scroll up” and see exactly what that
code
orsubl
command did either. But since neither TUIs nor GUIs preserve terminal history, that’s obviously not an advantage for TUIs.I sometimes use good old
ed
for sysadmin work, because it preserves the history. Then I really can scroll up and see a very clear audit log of this command resulted in that output.I’m not against having a terminal window into which you can type commands: I still think that’s the best interface for many situations. I’m more questioning the utility of TUIs. Or, to put it another way, a “dumb” terminal is great, but should we really, in the 21st century, be building application interfaces on top of an emulated VT100?
I run an instance too and agree it’s too power hungry. Just the RAM requirements are a bit excessive. Ruby seems to use a lot, as does Postgres and elasticsearch (not required, but needed if you want good searchability)
There’s also a newer implementation of an activitypub server at https://docs.gotosocial.org/en/latest/
I’ve been running a node from under my desk and I gotta say I’ve been really impressed with the ease of installation and the responsiveness of the dev team. Everything that I ran into was due to generic self-hosting problems like dynamic DNS and hairpin routing, gotosocial itself hasn’t given me any trouble.
This is what I use to run my server on, I have a server that could run Mastodon but it’s so fiddly to setup and operate that I never bothered. GtS on the other hand is extremely easy to run and they are very quickly (surprisingly so) adding features to give it parity with Mastodon.
What I’m waiting for is a “migrate from Pleroma to GTS” guide. I can probably figure it out but it looks like a mountain of faff and pain that my brain fog prevents right now.
There’s also Honk! if you’re willing to go SUPER minimalist.
I’m with the OP as well. I ran a Mastodon instance of my own for a bit less than a year, and after a few iterations of Rails migrations, the back-end and the front-end refused to speak and nobody could figure out why so I gave up :)
Have you considered swapping to pleroma? If I were to host a fediverse node, I’d try that first, looking at the current shape right now.
I think you can even graft the slick mastodon frontend to a pleroma backend.
For people like me who would never consider Pleroma because of their, um, politics, it’s worth noting there is a hard fork called Akkoma that is working to save the technology from its toxic community: https://coffee-and-dreams.uk/development/2022/06/24/akkoma.html
https://akkoma.dev/AkkomaGang/akkoma/
I can’t promise they’re better, not having personally used Pleroma or interacted with either dev community directly, but I’m cautiously optimistic.
They’ve put a Code of Conduct in place too: https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/CODE_OF_CONDUCT.md
…I’ve never seriously considered getting involved in fediverse dev (mastodon is no better for my mental health than twitter is), but I have to admit that hacking on Akkoma sounds fun. I’ve been wanting a good excuse to get into Elixir/Erlang’s ecosystem more.
I did some development on Pleroma back before their dev team got overtaken by shitlords, and I have to say I was impressed with how approachable it was. I’ve never done Elixir before but I have some dusty experience with Erlang and some very dusty experience with Rails and everything seemed to fit together in a sensible way, kind of what I wish Rails could have been. I wrote about my experience here: https://technomancy.us/191
I have great difficulty understanding the approach of “this tool is made by people I don’t like so I will deny myself the utility of this tool”.
It’s possible that part of your confusion is that with an open source project, it is often possible to use the software without directly giving the developers money or other obvious support. But this seems unwise if you want the software to continue to be developed and maintained, as most users of software do. And if you engage in less monetary ways like filing bug reports, you then have to interact with the people you do not like.
Fortunately this is a demonstration of one strength of FOSS, the right to fork: people who do not want to work with the Pleroma developers can take the codebase and go their own way, as Akkoma seems to be doing. Why spend time with people you don’t get along with, if you could just… not?
People who write open source software write it, primarily, for themselves. It will end up optimised for their use cases. If they are interested in creating a society that is antithetical to one in which I want to live then, pragmatically, they will probably evolve the software in directions that I dislike.
This seems like quite a bit of a stretch. Perhaps for social media, since different groups have different ideas on how to regular discourse, but vast amounts of software don’t fall in this bucks.
If libpng was written by Hitler, it still does the job.
This divisive attitude leaking (primarily?) out of America is seriously not healthy. For better or worse, people you do not agree with will not simply disappear. If we stop talking, all that is left is violence.
It does run the same, yes. But as skyfaller was saying, if you want to report a bug or send a patch, you depend on Hitler. Unless you fork. I don’t think such an extreme example serves your argument well.
Case in point: out-of-context, I would like to agree with this. But now that you mentioned Hitler, I have to remind you that western democraties actually kept talking with him until very late in the 30s. It didn’t stop the violence.
Most people are not Hitler, and we all know it. It was hyperbole for effect, and we all know that too. I feel you’re intentionally missing my obvious point.
The vast majority of your (likely) fellow Americans who you disagree with are not bad people. This is a deeply unhealthy perspective that will only make things worse, and outside this argument you surely know this too.
You’ll forgive me if I bow out now.
This isn’t about libpng; it’s about Pleroma, which is a social media tool.
It turns out when these kinds of people have atrocious opinions about minorities, they tend to also have bad ideas about moderation and harassment; they only care about the use cases that matter to straight white males.
I think it’s a bad idea to run social software that’s written by people who don’t care about moderation and protecting their users.
Citation needed please.
Social software is about bringing people together, right? Moderation and protecting users is about keeping people apart. I’ll cheerfully admit that there are reasons we keep people apart, but if the criteria is “software to bring people together” it seems obvious to me that the more laid-back software is the way to go.
The platonic ideal of protecting users is putting them in a box by themselves.
This kind of simplistic thinking is exactly the kind of thing that would be an enormous red flag if I was evaluating social media servers and I heard one of the maintainers saying it.
Sure, but you’ve neither explained why it’s incorrectly simplistic nor why it’s a red flag (nor justified your lazy dig at “straight white males”).
I’ll drop it, but if you want to have a discussion of substance DMs are always open. :)
I think it’s mostly rails actually. Ruby has a bit of a bad reputation when it comes to performance, when it’s mostly rails. In that area, other than JS always used to do the best, and compared to language implementations like Python it’s quite fast.
At least it was like that ages ago, when someone told me they want to rewrite some big project thinking switching away from Ruby would somehow magically make things faster.
I’ve never heard of Ruby being described as ‘quite fast’ compared to Python. Way back in the Ruby 1.8 days, Python was faster, but they’re now more or less neck and neck in terms of performance. Ruby got a bad reputation because of how slow its AST-based interpreter was back in the day.
On the other hand, JavaScript (specifically V8) and PHP are faster than both.
Yeah, I think you’re right. I don’t know much about either, but just going off what I see in top
You understand that’s not what we’re talking about with Kiwi Farms? Cloudflare’s post linked here says
Edit: no, apparently they don’t understand that.
It isn’t an unprecedented emergency. Someone posted a terrorist threat, which was removed from the site within minutes by the admin, and the information about the user was passed to law enforcement, as is longstanding site policy in such cases. This sort of thing happens on all kinds of forums and social media sites – threat posted, threat removed, threatener reported to authorities.
What is unprecedented is that this made Cloudflare block the site.
Ah so we don’t do bomb threats, because that would bring the police into play, but we kill people by harassment and count it. What a fine policy.
That’s exactly the kind of thing you say if you conceded to the outcry for whatever reason, but don’t want to admit that social movements have that kind of sway over your decisionmaking.
If this “documentation” about Keffals is from Kiwifarms, I don’t think this is something you should be repeating as fact. It is a trolling, doxxing and harrassment site and shouldn’t be mistaken for journalism.
Documented where?
You’re seriously citing a doxxing site as a reputable source?
I think when the site is the point of contention, citing it (it cites it’s sources backed up with archive links where possible) is completely reasonable.
About the latter of the accusations you decided to open with:
Neither behaviour is welcome on Lobsters.
The accusations primarily come from Twitter and Discord users involved, corroborated with tweet archives and witness testimony. It is up to you what the preponderance of the evidence suggests.
No, it’s up to YOU to consider the evidence before sharing, instead of mindlessly posting accusations of pædophilia.
You can’t repost hateshit here and then innocently go “just repeating what I’ve read, feel free to make up your own mind”.
You went deep enough to find the paedophilia slander; therefore you are certainly aware that KiwiFarms has an harrassment campaign going on; and this did not stop you from reposting the slander? You know exactly what you’re doing.
I also note that half your comments in this thread are a mixture of (a) reasonable argument about “the social-moral freedom of businesses to simply afford customers service” and “uncensorable people at their worst”, and (b) some KF talking point that is unconnected to your argument. I’m thinking specifically of
My personal reading on this is that you are intentionally spreading KF talking points, and posting them as part of longer on-topic comments to muddy the waters and avoid getting moderated.
@pushcx and other mods, this thread is probably a bear of a job already, and I see you are monitoring and moderating already, for which my thanks. Could you please look at the opening comment again? I know that 80% of the text is reasonable, but the ‘innocently repeated’ pedophilia hateshit needs to be excised. If it were in a separate comment it would be gone already. Thanks for taking another look.
You’re right. I missed it, and I appreciate you pointing it out. I’ve removed the comment.
This is a false conclusion. I have visited kiwi farms. I do find it bad. It’s not contradictory at all to hold the position “Kiwi farms is bad, however, it’s laughable any user on that platform is an imminent and/or emergency threat to human life”. I really don’t care for the site or it’s continued existence. I do care for the risk of landsliding DDOS protection and CDN services into stricter, unproductive or otherwise “generally worse” circumstances.
You do realize how difficult it is to evaluate a situation like this if all of the data (true or not, good or not) is being proactively censored, yes?
“These are literally the worst people for what they posted also no we cannot show what they posted or talk about it” is a formulation that cannot coexist with meaningful discussion of any type or rigor.
I’m not going to permit republishing their abuse here because they occasionally pretend they’re righteous vigilantes. It’s not difficult to evaluate because they’re obvious lying. If they had the vaguest sliver of justification they’d be an internationally recognized charity group that works with law enforcement like ICMEC, NCMEC or RAINN. Instead they’re a collaborative creative writing group like r/nosleep that also pretends their fictions are real, except instead of telling spooky stories with a flashlight under their chin, they recontextualize and invent evidence that their victims deserve the harassment they themselves commit. To be unambiguous: comments that repost their abuse will be removed and posters banned.
Thank you for doing the right thing in this case. It means a lot that this community won’t be pushing their propaganda.
I am also concerned about the lack of ability to censor the distributed systems that people want to eventually take place of these behemoth corporations. Do we really want swathes of uncensorable people at their worst, or does the risk of censorship at least provide a meaningful degree of moderation w.r.t the most extreme things people say and actionably call for? (Personally, considering anything on Kiwi Farms “ an imminent and emergency threat to human life” is laughable if you’ve visited the site, ever.)
People like to laugh at the former prime minister of my country for saying “The laws of mathematics are very commendable, but the only law that applies in Australia is the law of Australia.” I never laughed - it’s true, and a sobering thought for distributed communication projects. If you participate in a communication system which is uncensorable then your communication will be out there for all time. You’d better not misstep in case it becomes illegal later. And if operating that system means past content is downloaded to your computer, then using the system at all becomes de facto illegal. Once made illegal, ISPs can be tasked with monitoring for people who use said systems or using tools to obfuscate their activity. Whether it’s distributed or not, it all comes back to the law in the end.
I call it the Westphalian Gundam rule. The person who commands all the people with the guns, makes the rules.
Agreed on everything but Copilot. The freedom to study how the software works is a fundamental attribute of free software. Learning is not covered by the GPL’s requirements. Copilot sometimes copypastes code (honestly - who doesn’t) but broadly it learns. This is entirely in keeping with open source.
If we’re gonna set a standard that you can’t use things you learnt in software under an open-source license when writing commercial software, we might as well shutter either the entire software industry or the entire open-source movement, because literally everybody does that. It’s how brains work!
And of course, it’s not like being off Github is gonna prevent MS from feeding your project into Copilot 2.
Copilot does not learn.
Like all of these neural network “AIs”, it’s just a pattern recognition system that launders the work of many humans into a new form, which the corporation can profit from but the humans cannot. It’s piracy for entities rich enough to train and operate such an AI, and unethical enough to acquire the training data, but you or I would still be punished for pirating from the corporation. Whether or not it is legal is irrelevant to me (I’m in favor of abolishing copyright), but we must recognize the increasing power imbalance between individuals and corporations such “AI” represents.
Copilot understands nothing of what it writes. It learns nothing and knows nothing. It is not sentient or alive, no matter how tempting it is to anthropomorphize it.
I think “pattern recognition system that launders the work of many humans into a new form” is just a rude way to phrase “learning.”
Define “understands.” Define “knows.” I think transformers derive tiered abstract patterns from input that they can generalize and apply to new situations. That’s what learning is to me.
The standard philosophical definition of knowledge is a justified true belief. Copilot and other AIs make the belief part problematic, so bracket that. But they don’t justify things well at all. Justification is a social process of showing why something is true. The AIs sound like total bullshit artists when asked to justify anything. I don’t think Copilot “knows” things anymore than a dictionary does yet.
Putting aside Gettier cases, that’s not what I understand “justified” to mean. You just need to have a reason for holding the knowledge. With AI, reinforcement learning is the justification.
The point of “justified belief” is just that it’s not knowledge if you just guess that it’s raining outside, even if it is in fact raining.
The definition that @carlmjohnson is quoting is Plato’s and ever since Plato put it forth, knowledge theorists have been bickering about what “justified” means. The history of ideas after the age of Boethius or so isn’t quite my strong point so I’ll leave that part to someone else but FWIW most classical definitions of justification either don’t readily apply to reinforced learning, or if they do, it fails them quite badly.
That being said, if you want to go forth with that definition, it’s very hard to frame a statistical model’s output as belief in the first place, whether justified or not. Even for the simplest kinds of statistical models (classification problems with binary output – yes/no) it’s not at all clear to formulate what belief the model possesses. For example, it’s trivial to train a model to recognize if a given text is an Ancient Greek play or not. But when you feed it a piece of text, the question that the model is “pondering” isn’t “Is this an Ancient Greek play”, but “Should I say yes?”, just like any other classification model. If subjected to the right laws and statements, a model that predicts whether a statement would cause someone to be held in contempt of the court might also end up telling you if a given text is an Ancient Greek play with reasonable accuracy, too. “Is this an Ancient Greek play?” and “Is this statement in contempt of the court?” are not equivalent statements, but the model will happily appear to make both with considerable accuracy.
The model is making an inference about the content (“This content is of the kind I say yes to/the kind I say no to”), but because the two kinds cannot be associated to a distinct piece of information about the subject being fed to the model, I don’t think it can be said to constitute a belief. It’s not a statement that something is the case because it’s not clear what it asserts to be the case or not: there are infinitely many different classification problems that a model might turn out to solve satisfactorily.
In Greek, “justified” was some variation on “logos”: an account. Obviously everyone and their Buridan’s ass has a pet theory of justification, but I think it’s fair to interpret Plato’s mooted definition (it’s rejected in the dialogue IIRC!) as being “the ability to give an account of why the belief is true”. This is the ability which Socrates finds that everyone lacks, and why he says he knows that he knows nothing.
Ugh, it’s really tricky. This comes up in two dialogs: Theaetetus, where knowledge gets defined as “true judgement with an account” (which IIRC is the logos part) and it’s plainly rejected in the end. The other one is Meno, where it’s discussed in the terms of the difference between true belief and knowledge, but the matter is not definitively resolved.
I was definitely wrong to say it was Plato’s – I think I edited my comment which initially said “is effectively Plato’s” because I thought it was too wordy but I was 100% wrong to do it, as Plato doesn’t actually use this formulation anywhere (although his position, or rather a position that can be inferred from the dialogues, is frequently summarized in these terms). (Edit: FWIW this is a super frequent problem with modern people talking about ancient sources and one of the ways you can probably tell I’m an amateur :P)
You may know of this already but just in case your familiarity with modern philosophy is as spotty as mine, only it’s got holes in different places, and if you’re super curious patient, you’re going to find Gettier’s “Is Justified True Belief Knowledge?” truly fascinating. It’s a landmark paper that formalizes a whole lot of objections to this, some of them formulated as early as the 15th century or so.
The counter-examples Gettier comes up with are better from a formal standpoint but Russel famously formulated one that’s really straightforward.
Suppose I’m looking at a clock which shows it’s two o’clock, so I believe it’s two o’clock. It really is two o’clock – it appears that I possess a belief that is both justified (I just looked at the clock!) and true (it really is two o’clock). I can make a bunch of deductions that are going to be true, to: for example, if I were to think that thirty minutes from now it’s going to be half past two, I’d be right. But – thought I haven’t realized it – that clock has in fact stopped working since yesterday at two. (Bear with me, we’re talking about clocks from Russell’s age). My belief is justified, and it’s true, but only by accident: what I have is not knowledge, but sheer luck – I could’ve looked at the clock as half past two and held the same justified belief, but it would’ve been false, suggesting that an external factor may also be involved in whether a belief is true or not, justified or not, and, thus, knowledge or not, besides the inherent truth and justification of a statement.
I love collecting “realistic” Gettier problems:
My favourite ones come from debugging, that’s actually what got me into this in the first place (along with my Microwave Systems prof stubbornly insisting that you should know these things, even if engineers frown upon it, but that’s a whole other story):
I got a few other ones but it’s really late here and I’m not sure I’m quite coherent by now :-D.
I’m familiar with Gettier cases. I never dove very deep into the literature. It always struck me that a justification is not just a verbal formulation but needs some causal connection to the fact of the matter: a working clock causes my reasoning to be correct but a stopped clock has no causal power etc. I’m sure someone has already worked out something like this and brought out the objections etc etc but it seems like a prima facie fix to me.
Yes, IMO the belief is “how may this text continue?” However, efficiently answering this question requires implicit background knowledge. In a similar sense, our brains may be said to only have information about “what perpetuates our existence” or “what makes us feel good.” At most we can be said to have knowledge of the electric potentials applied to our nerves, as Plato also made hay of. However, as with language models, a model of the unseen world arises as a side effect of the compression of sensory data.
Actually, language models are fascinating to me because they’re a second-order learner. Their model is entirely based on hearsay; GPT-3 is a pure gossip. My hope for the singularity is that language models will be feasible to make safe because they’ll unavoidably pick up the human ontology by imitation.
That’s a question, not a belief – I assume you meant “This text may continue ”. This has the same problem: that’s a belief that you are projecting onto the model, not necessarily one that the model formulates. Reasoning by analogy is an attractive shortcut but it’s an uneasy one – we got gravity wrong because of it for almost two thousand years. Lots of things “may be said” about our brains, but not all of them are true, and not all of them apply to language models.
Sure, but by that metric everything that anyone has ever said is a belief that person is projecting. I think that language models match the pattern of having a belief, as I understand it.
You’re mixing up meta-levels here: I believe that the model believes things. I’m not saying that we should believe that the model believes things because the model believes that; rather, (from my perspective) we should believe it because it’s true.
In other words, if I model the learning process of a language model, the model in my head of the process fits the categories of “belief” and “learning”.
Observing that a model follows the pattern of a behaviour is not the same as observing that behaviour though. For example, Jupiter’s motion matches the pattern of orbiting a fixed Earth on an epicycle, but both are in fact orbiting the Sun.
FWIW, this is an even weaker assumption than I am making above – it’s not that no statements are made and that we only observe something akin to statements being made. I’m specifically arguing that the statements that the model appears to make (whether “it” makes them or not) are not particular enough to discriminate any information that the model holds about the world outside of itself and, thus, do not qualify as beliefs.
If the world had a different state, the model would have different beliefs - because the dataset would contain different content.
Also, Jupiter is in fact orbiting a fixed Earth on an epicycle. There is nothing that inherently makes that view less true than the orbiting-the-sun view. But I don’t see how that relates at all.
The problem is that reinforcement learning pushes the model toward reproducing the data distribution it was trained on. It’s completely orthogonal to truth about reality, in exactly the same way as guessing the state of the weather without evidence.
The data is sampled from reality… I’m not sure what you think evidence is, that training data does not satisfy.
It’s exactly the same as guessing the weather from a photo of the outside, after having been trained on photo/weather pairs.
The data for language models in general is sampled from strings collected from websites, which includes true statements but also fiction, conspiracy theories, poetry, and just language in general. “Do you really think people would get on the Internet and tell lies” is one of the oldest jokes around for a reason.
You can ask GPT-3 what the weather is outside, and it’ll give you an answer that is structured like a real answer would be, but has no relation to the actual weather outside your location or whatever data centers collectively host the darned thing. It _looks_like a valid answer, but there’s no reason to believe it is one, and it’s dangerous to infer that anything like training on photo/weather pairs is happening when nobody built that into the actual model at hand.
Copilot in particular is no better - it’s more focused on code specifically, but the fact that someone wrote code does not mean that code is a correct or good solution. All Copilot can say is that it’s structured in a way that resembles other structures it’s seen before. That’s not knowledge of the underlying semantics. It’s useful and it’s an impressive technical achievement - but it’s not knowledge. Any knowledge involved is something the reader brings to the table, not the machine.
Oh I’ll readily agree that Copilot probably doesn’t generate “correct code” rather than “typical code.” Though if it’s like GPT-3, you might be able to prompt it to write correct code. That might be another interesting avenue for study.
“However, this code has a bug! If you look at line”…
I’ve experimented with this a bit and found it quite pronounced - if you feed copilot code written in an awkward style (comments like “set x to 1”, badly named variables) you will get code that reflects that style.
IMHO it’s perilous and not quite fair to think what a machine should be allowed to do and not to do by semantic convention. “Machine learning” was one uninspired grant writer away from going down into history as, say, “statistically-driven autonomous process inference and replication”, and we likely wouldn’t have had this discussion because anything that replicates code is radioactive for legal teams.
Copilot is basically Uber for copy-pasting from Stack Overflow. It’s in a legally gray area because the legal status of deriving works via statistical models is unclear, not because Microsoft managed to finally settle the question of what constitutes learning after all. And it’s probably on the more favourable side of gray shades because it’s a hot tech topic so it generates a lot of lobbying money for companies that can afford lawyers who can make sure it stays legally defensible until the next hot tech topic comes up.
Also, frankly, I think the question of whether what Copilot does constitutes learning or not is largely irrelevant, and that the question of whether Copilot-ing one’s code should be allowed is primarily rooted in entitlement. Github is Microsoft’s platform so, yes, obviously, they’re going to do whatever they can get away with on it, including things that may turn out to be illegal, or things that are illegal but will be deemed legal by a corrupt judge, or whatever. If someone wants $evil_megacorp to not do things with your code, why on Earth was their code anywhere near $evil_megacorp’s machines in the first place?
This cannot be a surprise to anyone who’s been in this field for more than a couple of years. Until a court rules otherwise, “fair” is whatever the people running a proprietary platform decide is fair. If anyone actually thought Github was about building a community and helping people do great things together or whatever their mission statement is these days, you guys, I have a bridge in Manhattan, I’m selling it super cheap, the view is amazing, it’s just what you need to take your mind off this Copilot kerfuffle, drop me a line if you wanna buy it.
(Much later edit: I know Microsoft is a hot topic in FOSS circles so just to be clear, lemme just say that I use Github and have zero problem with Copilot introducing the bugs that I wrote in other people’s programs :-D).
If machine learning was called “data replication”, it would be misnamed. And if it was called “pattern inference”, it would just be a synonym for learning… I wouldn’t care about Codex if I thought it was just a copypaste engine. I don’t think it is, though. Does it occasionally copypaste? Sure, but sometimes it doesn’t, and those are the interesting cases for me.
I don’t think this at all comes down to Github being Microsoft’s platform so much as Github being the biggest repo in one place.
I’m not at all defending Microsoft for the sake of Microsoft here, mind. I hate Microsoft and hope they die. I just think this attack does not hold water.
I beg to differ! Machine learning is a misnomer for statistically-driven autonomous process inference and replication, not the other way ’round!
I’m obviously kidding but what I want to illustrate is that you shouldn’t apply classical meaning to an extrapolated term. A firewall is neither a wall nor is it made of fire, and fire protection norms doesn’t apply to it. Similarly, just because it’s called machine learning, doesn’t mean you should treat it as human learning and apply the same norms.
I don’t think machine learning learns because it’s called machine learning, I think it learns because pattern extraction is what I think learning is.
I realize that. I want to underline that, while machine learning may be superficially analogous to human learning, just like a firewall is superficially analogous to a wall made of fire, it does not mean that it should be treated the same as human learning in all regards.
I don’t think it should be treated the same as human learning in all regards either. I think it’s similar to human learning in some ways and dissimilar in others, and the similarities are enough to call it “learning”.
Do you think Microsoft would be okay with someone training an AI on the leaked Windows source code and using it to develop an operating system or a Windows emulator?
You don’t even have the right to read that. That said, I think it should be legal.
I’m not asking whether it should be legal, but whether Microsoft would be happy about it. If not, it’s hypocritical of them to make Copilot.
Oh by no means will I argue that Microsoft are not hypocritical. I think it’s morally valid though, and whether Microsoft reciprocates shouldn’t enter into it.
Bit of a niggle, but it depends on the jurisdiction, really. Believe it or not, there exist jurisdictions where the Berne Convention is not recognized and as such it is perfectly legal to read it.
I’d personally relicense all my code to a license that specifically prohibits it from being used as input for a machine-learning system.
This is specifically regarding text and images, but the principle applies.
https://gerikson.com/m/2022/06/index.html#2022-06-25_saturday_01
“It would violate Freedom Zero!” I don’t care. Machines aren’t humans.
Exactly this. I think anthropomorphising abstract math executed in silicon is a trap for our emotional and ethical “senses”. We cannot fall for it. Machines and algorithms aren’t humans, aren’t even alive in any sense of the word, and this must inform our attitudes.
Machines aren’t humans. That’s fine, but irrelevant.
Machines aren’t alive. Correct, but irrelevant.
If the rule doesn’t continue to make sense when we finally have general AI or meet sapient aliens, it’s not a good rule.
That said, we certainly don’t have any human-equivalent or gorilla-equivalent machine intelligences now. We only have fuzzy ideas about how meat brains think, and we only have fuzzy ideas about how transformers match input to output, but there’s no particular reason to consider them equivalent. Maybe in 5 or 10 or 50 years.
Won’t happen. If it does happen, we all die very soon afterwards.
I think the rule is good. We could come up with a different rule: oxygen in the atmosphere is a good thing. If we reach general AI or meet sapient aliens, they might disagree. Does that mean the rule was bad all along? I feel similar about anthropomorphising machines. It’s not in our ecological interest to do so.
Source distribution is like the only thing that’s not covered by Freedom Zero so you’re good there 🤷🏻♀️
Arguably the GPL and the AGPL implicitly prohibits feeding it to copilot.
(I personally don’t mind my stuff being used in copilot so don’t shoot the messenger on that.
(I don’t mind opposition to copilot either, it sucks. Just, uh, don’t tag me.))
Do we have a lawyer’s take here, because I’d be very interested.
It’s the position of the Software Freedom Conservancy according to their web page. 🤷🏻♀️ It hasn’t been tried in court.
I’m on board; however, I would, at least personally, make an exception if the machine-learned tool and it’s data/neural net were free, libre, and open source too. Of course the derivative work also needs to not violate the licenses too.
For most intents and purposes, licences legally cover it as “creation of derived works”, otherwise why would “clean room design” ever exist. Just take a peek at the decompiled sources, you’re only learning after all.
I think this depends on the level of abstraction. There’s a difference in abstraction between learning and copying - otherwise, clean room design would itself be a derivative work.
I don’t understand what you mean. Clean-room implementation requires not having looked at the source of the thing you’re re-implementing. If you read the source code of a piece of software to learn, then come up with an independent implementation yourself, you haven’t done a clean-room implementation.
Cleanroom requires having read a documentation of the thing you are reimplementing. So some part of the sequence read -> document -> reimplement has to break the chain of derivation. At any rate, my contention is that training a neural network to learn a concept is not fundamentally different from getting a human to document a leaked source code. You’re going from literal code to abstract knowledge back down to literal code.
Would it really change your mind if OpenAI trained a second AI on the first AI in-between?
I think it’s quite different in the sense that someone reading the code’s purpose may come up with an entirely different algorithm to do the same thing. This AI won’t be capable of that - it is only capable of producing derivations. Sure, it may mix and match from different sources, but that’s not exactly the same as coming up with a novel approach. For example, unless there’s something like it in the source you feed it, I doubt the “AI” would be able to come up with Carmack’s fast inverse square root.
You can in theory get Codex to generate a comment from code, and then code from the comment. So this sort of process is entirely possible with it.
It might be an interesting study to see how often it picks the same algorithm given the same comment.
In copyright law, we have usually distinguished between an interface and an implementation. The difference there is always gonna be fuzzy, because law usually is. But with an AI approaches, there’s no step which distinguishes the interface and the implementation.
One problem here is the same sort of thing that came up in the Oracle/Google case — what do you do with things that have one “obvious” way to do them? If I’m the first person to write an implementation of one of those “obvious” functions in a given language, does my choice of license on that code then restrict everyone else who ever writes in that language?
And a lot (though of course not all) of the verbatim-copying examples that people have pointed out from Copilot have been on standard/obvious/boilerplate type code. It’s not clear to me that licensing ought to be able to restrict those sorts of things, though the law is murky enough that I could see well-paid attorneys arguing it either way.