Minggu, 08 November 2026

Asahi Linux Drops MIT and Goes Full GPL After AI Tools Were Used to Steal Unreleased Code

Asahi Linux GPL move

Asahi Linux is the reason you can run Linux on an Apple Silicon Mac today. For years, the project put most of its own code under the MIT license so that anyone, including the BSDs, could reuse it as needed.

That is changing because Asahi Linux is tired of code laundering. They have announced that Asahi is moving all of its repositories to the GNU General Public License version 2 or later. Going forward, all Asahi Linux code will be under strong copyleft licenses only.

This is because people were taking in-development code straight out of their personal forks, publishing it without credit, or rewriting it with AI to hide its origin for "replacing the project and aggressively monetising Linux on Apple Silicon."

What is code laundering?

Code laundering (also called license laundering) is the practice of taking someone else's code and passing it through a process that hides where it came from, so you can use it without honoring the original license or crediting the author.

Before AI, this usually meant manually rewriting code line by line, renaming variables and stuff, and shuffling functions around until it no longer looked like the original.

LLMs made it much more easy and cheaper of course.

📋
The MIT license only asks you to keep the original copyright notice. It doesn't require you to share your changes or keep your version open. That's what makes it popular, and it's also what made things problematic for Asahi here.

Learning from history

The move has come after the Asahi team was made aware "some time ago" of multiple attempts to exploit its permissive licensing to hijack its work.

In the most extreme cases, feature code that was still under development was lifted from developers' personal forks before it was even publicly released. The report points out that the MIT license "explicitly allows this, and has no carveouts to protect against bad faith actors."

Asahi didn't name anyone in the report. It also didn't spell out how existing contributions will be relicensed or whether every past contributor agreed to it.

Asahi draws parallels with WINE's situation two decades ago. WINE, the compatibility layer that lets you run Windows apps on Linux, was originally MIT-licensed too. But in the late 90s and early 2000s, companies took the code, built proprietary forks on top of it, and sold them commercially. So, in 2002, the WINE team relicensed to the LGPL to discourage proprietary forks and push companies to contribute upstream.

Those who do not learn from history are doomed to repeat it

Asahi has been upset lately

Asahi didn't name anyone so we are left with guesswork on who they are targeting with this license move.

There have been at least two public forks of Asahi's work in recent months, both tied to AI-assisted development. In case you did not know, Asahi Linux forbids AI generated code contribution.

The first is Aurora Silicon and its Vulkan driver, Borealis. Borealis is a fork of Asahi's HoneyKrisp, the Vulkan driver for Apple GPUs. Aurora Silicon submitted a pull request to register its own Vulkan driver ID with Khronos (VK_DRIVER_ID_AURORA_BOREALIS), says the driver runs on M1 to M5 and the A18 Pro, and keeps it in its own Mesa fork rather than upstream.

The second is Gravity Linux, a Fedora-based distro for Apple Silicon. It was forked from Asahi over the disagreement about LLM use.

To be fair to Gravity, it is open source, it isn't selling anything, and it credits its AI use openly. It even says it plans to sunset the distro once its driver work lands upstream.

It isn't the kind of bad actor the progress report describes. But it does represent the "permissive fork that embraces AI" approach that Asahi has consistently pushed back against.

📋
For clarification, Asahi's progress report does not mention Aurora Silicon or Gravity Linux by name. I have provided their conflict with Asahi as context.

Why this license change matters

As far as I can tell, this is the first time a major open source project has moved to copyleft specifically because of AI-assisted code laundering. Projects have relicensed before, but usually to stop cloud providers from reselling their work as a service. This one is specifically about AI.

I wouldn't be surprised if more hardware enablement and reverse-engineering projects follow. Making the first changes takes a lot of time and effort but they are easier to "rewrite" once someone has done the hard part.

Will the GPL actually help?

If the problem is people who already ignore the MIT license, why would they respect the GPL? After all, GPL cannot stop a determined bad actor. Nothing does, actually.

Stripping attribution from MIT code already breaks the MIT license, since keeping the copyright notice is its one real condition.

What the GPL changes is the commercial benefit. Under MIT, someone can take Asahi's code, close it up, and sell a product, and that's perfectly legal as long as the notice stays in.

Under the GPL, anyone who distributes a modified version has to release the source under the same license. You can't legally build a closed, paid Apple Silicon distro on top of GPL code. And if a product's source has to be public, the copying is easier to spot.

Not everyone is happy

The move has drawn criticism, particularly from the BSD side, which was one of the main reasons Asahi chose MIT in the first place. OpenBSD's Apple Silicon support relies on Asahi's m1n1 bootloader.

OpenBSD developer Bryan Steele wrote on X:

"Sad to see Asahi out there burning bridges for no reason.. relicensing m1n1 and drivers under GPL2-or-later, seemingly without the consent of all prior contributors, under the guise of "defending against AI bad actors", seems entirely disingenuous and misguided."

Wrapping up

Asahi is betting that copyleft license provides a better defense in this changed world where anyone can launder code with a prompt.

It may not stop the bad actors from rewriting its code, but at least it reduces the chances of a closed commercial fork.

It would be interesting to see whether the BSD community finds a way to keep working with Asahi under the new terms.

Suggested Read 📖 These Linux Distros Can Run on Apple Silicon Mac



from It's FOSS https://ift.tt/MbCYphe
via IFTTT

Sabtu, 07 November 2026

Hate Chromium? Well, There’s a Linux Desktop Based on it Now

domicile desktop banner with a construction worker penguin

Say the name "Chromium" out loud in Linux circles, and you will soon see what a mob looks like. Many people don't like how much of the web rests on one engine led by Google, and they prefer to keep it away from their systems.

Now we have Domicile, a new Rust-based Wayland compositor that uses a patched build of Chromium to draw the entire desktop as a web page.

Apps still run natively, and each Wayland window goes straight into Chromium's rendering system and shows up inside that page as an element. A window and a website can then sit side by side and be arranged the same way.

Domicile: Overview ⭐

Domicile is not a drop-in desktop like GNOME or KDE Plasma. It leaves the bar, the window layout, and the look to a shell, and that shell itself is a web page you have to write yourself.

Native app windows and websites both sit on that page, and because CSS decides where each one goes, layouts like tiling or floating take only a few lines of styling.

You can even swap the shell without closing a single window because loading a new one resets only the state held in the shell's own page. A single page can span every monitor, and shells are built from packages that anyone can publish on npm, whether it is a whole desktop, a bar, or a launcher.

The compositor still handles the lock screen, tray icons, notifications, and screen sharing, while the shell decides how they look. The built-in browser runs Manifest V3 Chrome extensions, but some of them behave differently than they do in Chrome.

Apps need Wayland support to run. Electron, SDL, and Qt apps start in Wayland mode, but X11-only ones will not run. Xwayland, the compatibility layer that lets X11 apps work on Wayland desktops, is something Domicile does not include.

The project is provided under the MIT license, and the Chromium files it modifies stick to Chromium's licenses. One more thing, and this could be a dealbreaker for some of you, the project is AI-assisted.

Manganese, the element?

0:00
/0:04

Not quite. Manganese is the ready-made shell that comes with Domicile, and it works as a complete tiling desktop out of the box. Its keybindings follow Sway's on the Super key, and you get ten workspaces along with tabs, stacks, splits, floating windows, and a scratchpad.

Websites open as windows too, sitting next to native apps in the same layout, while extensions from the Chrome Web Store show up as buttons in the top bar.

It comes with a Settings app, clipboard history, launcher, screenshots tool, notifications, and a lock screen. Since every part of it is its own package, you can add a new item to the bar or replace the launcher while the rest stays as it is.

Getting started

Packages exist for Fedora, openSUSE, Debian, Ubuntu, and Arch Linux, plus an AUR package for Arch users. For NixOS, or Nix on any distro, you can use the project's flake.

📋
It runs only on x86_64, and the project has no ARM builds.

A monolithic package carries Manganese, the login session, the domicile command, and the React packages that shells build against. After installing, you point a config file at the shell you want, then log out and pick "Domicile" on the login screen.



from It's FOSS https://ift.tt/EhLMJgB
via IFTTT

Jumat, 06 November 2026

Kitty 0.50 Picks Up Where You Left Off After a System Restart

kitty 0.50 release banner

kitty is a GPLv3-licensed, GPU-based terminal emulator for Linux and macOS that uses OpenGL for rendering and is written in C, Python, and Go.

It can organize work into tabs and windows across seven layouts, supports small terminal programs called kittens that can be used to extend it, and can be controlled from the shell.

v0.50, its newest release, can bring back your open windows after a logout on Linux and macOS.

Kitty 0.50

kitty 0.50 release shown against a wallpaper

kitty now saves every OS window, tab, and window with its scrollback when a session ends and restores them at the next launch. You turn it on in kitty.conf with the restore_session_after_logout setting.

On Linux, this needs a desktop portal with v3 of the inhibit interface, and while Linux stores the state unencrypted and readable only by you, a macOS system would encrypt it with a dedicated key in the keychain.

Docked windows are new too, and they let you pin a window to the edge of another window or a tab. They sit outside the layout and are meant for things like a status bar or a file tree. A window dock goes wherever its window goes, and a tab dock stays until the last regular window in that tab closes.

There are also the three new cursor trail shaders called cursor-trail-railgun, cursor-trail-torpedo, and cursor-trail-pixiedust. When in use, these emit particles off the moving cursor, giving you a Neovide-like trail. They need cursor trails turned on, and shaders can also be triggered with key presses now.

Wayland users can now use a touchscreen to click with a tap, scroll with a swipe, and select text by holding a finger in place before dragging to select the rest of it. Window decorations on GNOME and similar compositors also look native and use the desktop's titlebar font and button layout (as shown above).

The release also fixes a flaw that let a malicious request bypass remote control password authentication, along with several memory safety bugs.

Some tests

I ran kitty 0.50 on Ubuntu 26.10 with GNOME 51 on Wayland, all running inside a virtual machine.

First, I tried docked windows by adding two key bindings to my config using Nano:

map f1 launch --type=tab-dock --dock-edge=bottom --dock-size=1 --dock-skip-focus watch -n1 date
map f2 launch --type=window-dock --dock-edge=left --dock-size=25% top

I pressed F1 first. A one-row strip showed up at the bottom of the window and stayed there. I had pointed it at watch -n1 date, but all I got was a shell prompt.

F2 was next. It opened a top panel on the left edge, and the shell made room for it. I kept pressing it, and each press added another panel beside the first, three in total.

Opening a new tab using Ctrl+Shift+T gave me a clean slate, with the earlier view going to the background.

Next, I tested one of the three new cursor trail shaders. I added cursor_trail 1 and custom_shaders cursor-trail-pixiedust to my config and restarted kitty. Whenever the cursor jumped across the window, it left a trail of small white specks behind it.

Installation

You can use the following cURL command to get kitty:

curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin

It is also available in the repositories of most major Linux distros, but these tend to run behind when it comes to new releases. Here's a list to give you a quick start:

  • Ubuntu: sudo apt install kitty
  • Fedora: sudo dnf install kitty
  • Arch Linux: sudo pacman -S kitty

Building from source is also a possible installation path if you prefer that.

Before you click away, know that you can customize kitty to your liking by tweaking its various settings or installing kittens.



from It's FOSS https://ift.tt/4i6LS58
via IFTTT

Kamis, 05 November 2026

Passbolt is an Open Source Password Manager Built Specially For Teams

passbolt penguin-themed banner

Sharing a login with a teammate often means pasting it into a chat, dropping it in a spreadsheet, or pinning a note somewhere everyone can see.

That works until a password changes, someone leaves the team, or your credentials get leaked thanks to an employee's hasty story post on social media.

Passbolt is built for exactly that problem. You might remember it from our Linux password managers list, where it was listed as the go-to for businesses and teams.

💡
If you were looking for solutions that are tailored for individuals, then Proton Pass (partner link) and AliasVault are good picks to consider.

No password woes?

an empty passbolt cloud account dashboard

Passbolt is the creation of Passbolt SA, a company based in Luxembourg. It lets teams store and share logins and other secrets, making them accessible from one place, reducing the chances of team members being served expired or exposed credentials.

Underneath, it uses OpenPGP for encryption, and you log in with two things, a private key and a passphrase. Every person with access to a secret gets their own separately encrypted copy of it.

To use it in a browser, you will need to install its extension, which takes care of the security-sensitive operations and auto-fills logins on websites.

But there's something you need to know.

The Community Edition is open source, available on GitHub under the AGPL-3.0 license, and so are the browser extension, the mobile apps, and the Docker and Helm setups.

Then there are the paid plans. Pro and Enterprise are the self-hosted ones, and Cloud Business, Cloud Sovereign, and Cloud Enterprise are hosted by Passbolt. They add things like SSO, account recovery, and activity logs on top of what the Community Edition offers.

Passbolt says the Pro and Enterprise editions use the AGPL license too. Its GitHub organization lists no separate repositories for them. Pro also needs a subscription key to run, and you lose updates and support once the subscription ends.

Trying the Passbolt Cloud

passbolt cloud signup form

I signed up for the Cloud Business trial by filling out a form with my full name, email address, organization name, and the workspace URL I wanted all my content stored under.

Passbolt also asks you to give consent to it storing and processing this personal information in line with its privacy policy.

Once submitted, I was notified that an email with instructions was on its way.

I followed the link in it, after which a configuration page took over, running through a few steps before it let me get in without setting a password. Passbolt then nudged me to install its browser extension.

The browser extension

Seeing that I was on Vivaldi, it automatically showed me a download button to get the Chromium version of the extension installed. Before adding it, I went through the permissions it asked for.

It requests a broad set, covering reading and changing all my data on all websites, modifying the data I copy and paste, and managing my downloads.

After reviewing the permissions the extension required and accepting them, I was taken into the passphrase and security token configuration phase, where I had to pick a passphrase, followed by a security token made up of a color and three characters.

Managing entries

Now that I was logged in, I started adding new entries. They are created from the blue "Create" button at the top-left, and the types are diverse, including Passwords, TOTPs, Custom Fields, Pin Codes, and Notes. I started populating Passbolt with some social media-related logins.

The new entry form for passwords offers a lot of customizability. I could set the name, URI, username, and password, along with a color and an icon for the entry.

The generator is very useful too, letting me set the length, pick the character types to include, and even switch to passphrases for more flexibility when creating new accounts.

When I saved an entry, Passbolt asked for my passphrase, with the security token I had picked sitting right next to the field. It can also remember the passphrase for a while, with choices running from 5 minutes to staying remembered until I log out.

Sharing, exporting, and deleting can be done in batches as well. You just select the entries and pick an option from the toolbar above the list, and when you delete, Passbolt cautions that the entry is removed permanently and cannot be recovered.

Autofilling passwords

Next, I checked out the autofill feature through the browser extension. When I went to log in to Threads, it said no passwords were found for the current page and did not suggest the saved credential. I had to search for it manually, and only then did it fill in the login form once I clicked "Use on this page."

That came down to the entry's URI, which I had saved as threads.net while the login page sat on threads.com.

I could also add new entries from the extension and browse through the filters, groups, and tags from my account.

Collaborating with others

I then tried my hand at the highlight of the tool, collaborating with other team members.

For this, I went into the "Manage Users & Groups" menu accessible via the gear button on top-right and invited a colleague for collaboration (shown as P).

He received an invitation email, and once he was set up, I gave him access to a specific folder I had created (Passbolt Collaboration Test), filled with credentials I had imported.

To do that, I used the "Share" option found by right-clicking on the folder, where I typed his name into the field, giving him the read permission.

P could access the folder without much fuss, and with the permission he had, he could not edit any entries but could copy the username, password, URI, and permalink for an entry.

From the same Users & Groups menu from earlier, I could also promote him from User to Admin, giving him control over the workspace's users and settings, or suspend his account when needed.

Interested?

To try Passbolt Cloud, you sign up with your name, email, organization name, and a workspace URL. The 7-day trial starts automatically without Passbolt pestering you for your credit card info.

After that, paid options include Cloud Business, which costs $5.4 per user per month on a monthly plan, or $4.9 if you go yearly. Cloud Sovereign is $8 per user per month billed annually, and both need at least 10 users.

You can also get a custom quote tailored to your setup via Cloud Enterprise.

If you would rather host it yourself, the Community Edition is free with no cap on users, and you can install it on Debian, Ubuntu, Docker, Kubernetes, Red Hat, AlmaLinux, and more.

Pro adds extras like SSO and LDAP provisioning, and it costs $4.9 per user per month billed annually for a minimum of 10 users.

Browser extensions are also available for Chromium browsers like Chrome, Brave, Edge, and Vivaldi, as well as Firefox and Safari. There are apps for iOS and Android too, and the only desktop app is for Windows ☹️.

As an alternative, Linux users can make use of the CLI tool Passbolt offers.



from It's FOSS https://ift.tt/ZSN8a1n
via IFTTT

FOSS Weekly #26.45: Fedora 45, Immutable Ubuntu, Mint New Feature, Dual Boot Without USB and More Linux Stuff

FOSS Weekly

Fedora 45 arrived about two weeks late, but it’s packed. You get Linux 7.2, GNOME 51, and Plasma 6.7, plus kmscon replacing the old text console and a QR code that now leads to a page for kernel panics.

Could Ubuntu go immutable? Canonical has restarted Ubuntu Core Desktop, a snap-based system that stays locked down, and a dedicated team is now working on it. Both it and a proposed LTS firmware package are still early.

Ubuntu and many other distros turned hibernation off by default years ago, partly because it was slow. Linux Mint is bringing it back, with a few useful tweaks..

KDE Linux will load the ntsync kernel module by default. It gives Wine and Proton a closer match to Windows sync primitives, which can substantially boost performance.

A ministry merger ended Denmark’s Collabora pilot before its evaluation, Collabora says. It adds that the result shouldn’t count against the suite, and it says the first phase worked well.

France’s National Assembly has backed a tax of 5.5 euro cents per gigabyte delivered to French internet subscribers. VideoLAN, the nonprofit behind VLC, says it could cost over €1 million a year.

Nitrux is warning users that nitrux.org is an unaffiliated, AI-generated site using its name and logo.

CTA Image

Serious about using Ubuntu Linux on servers? Mastering Ubuntu Server book has now been updated for Ubuntu 26.04 LTS. The new version is available on Amazon.

This bestseller book is written by Jay LaCroix, of LearnLinuxTV and Ken VanDine, Staff Engineer at Ubuntu. From the Linux fundamentals to Ansible, MicroK8s and even Local AI with Lemonade, the book covers it all.

Mastering Ubuntu Server

🧠 What We’re Thinking About

There are two trends I am noticing. More European countries are opting for open source software in public institutions.

Latest in this list is the news that schools in six German states can now sign up for a Nextcloud-based cloud run by IONOS in German data centers. The four-year contract is open to other states later, and schools aren’t required to join.

The next trend is to use AI for creating open source alternatives to mainstream software as a service platforms like Adobe and Microsoft. Take the example of Puter’s new everything repo that offers more than 50 open source web apps, under MIT, that you can use in the browser or self-host.

🧮 Linux Tips, Tutorials, and Learnings

You don’t need a full VPN app for occasional use on Linux. Vivaldi with Proton VPN, Firefox’s built-in VPN, and Opera all offer free browser-only options.

The mv command has an interesting new option that lets you swap two files or directories. No need for the usual 3 steps with temp file in between.

Here's a collection of projects that let you run Linux directly on Apple Silicon Macs. My pick would be Fedora Asahi Remix, which works best, with nearly everything functional on M1 and M2 machines, while M3 support is still new.

👷 Homelab and Hardware Corner

You can give every container in your homelab its own name instead of an IP and port by using Tailscale Services.

In other news, Raspberry Pi has yet again raised prices, this time on its 16GB Raspberry Pi 5, which goes up $80 to $385. The 16GB Compute Module 5 also sees a $40 hike.

✨ Apps and Projects Highlights

Remember Wubi? Libertix brings that idea back, letting you install Linux Mint or Zorin from inside Windows without a USB drive.

📽️ Videos for You

Kitty is awesome. Here is a video that shows the tweaks to make it even more awesome.

💡 Quick Handy Tip

firefox quick tip

The "Hide tabs and sidebar" option on Firefox merges the top tab bar into a slim vertical ribbon along your screen's edge. Hiding the top tabs frees up valuable vertical space, expanding your main view while keeping any open tabs reachable via a quick hover.

To turn it on, right-click the top toolbar, pick "Customize Toolbar," and drop the Sidebar button onto your bar. Click the new icon, right-click inside the sidebar, choose "Customize Sidebar," and enable the "Hide tabs and sidebar" option to collapse everything instantly.

🎋 Fun in the FOSSverse

Our Shortform Showdown puzzle will have you identify a series of short forms or abbreviations for commonly used Linux tools, commands, and concepts.

GRUB is King.

📆 Trivia Bit: In 1952, CBS used UNIVAC to forecast the presidential race. Its early call gave Eisenhower 438 electoral votes to Adlai Stevenson’s 93, but the team held it back because the result looked implausible. Eisenhower ultimately won 442 to 89.

🧑‍🤝‍🧑 From the Community: The thread by Pro FOSSer Ernest about who uses AI and what one understands about it is still going strong. Do you have anything to add to the conversation?



from It's FOSS https://ift.tt/QwrsOtR
via IFTTT

This Overlooked Linux mv Option Replaces Three Commands With One

mv exchange

Every Linux user has done the three-step dance at least once. You want to swap two files, so you move the first one to a temporary name, move the second one into its place, and then move the temporary file back.

Ever felt that this is a bit... clumsy? And for a moment, one of your files simply doesn't exist. That doesn't feel right!

Since version 9.5, GNU coreutils has a better way: mv --exchange.

In this article, I'll show you what it does, how to check if your system has it, where it actually helps, and the mistake I made the first time I used it on directories.

The old way: three moves and a temporary name

Let's say you have two configuration files, nginx.conf and nginx.conf.new, and you want the new one to take the place of the old one while keeping the old one around.

The classic approach looks like this with the mv command:

mv nginx.conf nginx.conf.tmp
mv nginx.conf.new nginx.conf
mv nginx.conf.tmp nginx.conf.new

There are two problems here:

  • There is a gap. Between the first and second command, nginx.conf doesn't exist. If a service reads it at that exact moment, it finds nothing (and trust me, one day that will happen).
  • It can fail halfway. If the second command fails, you are left with a temporary file and a half-finished swap to clean up by hand.

The exchange option does this in a single command:

mv --exchange nginx.conf nginx.conf.new

Swap files with mv --exchange

The --exchange option tells mv to swap the two paths in a single operation. On Linux, it uses the kernel's renameat2() system call with the RENAME_EXCHANGE flag, so the swap is atomic: at any moment, both names exist and point to a file.

Check if your mv supports it

First, check your coreutils version:

mv --version

On my machine, running NixOS, I get:

mv (GNU coreutils) 9.11

You need version 9.5 or newer. Careful here: version numbers are not decimals. They are compared part by part, so 9.11 (nine point eleven) is newer than 9.5. You can also check whether the option is listed in the help:

mv --help | grep exchange

If this prints nothing, your mv doesn't have the option yet. I'll talk about which distributions ship it later in this article.

Swap two files

Let's create two small files to test:

echo "config A" > a.conf
echo "config B" > b.conf

Now swap them:

mv --exchange a.conf b.conf

Check the result:

cat a.conf b.conf
config B
config A

That's it. The contents traded places in one command, and no temporary file was involved.

Swapping two files with mv --exchange in the terminal

Swap two directories (and the mistake I made)

It works for directories too, which is where it really shines. But the first time I tried it, it failed:

mkdir release-old release-new
touch release-old/v1 release-new/v2
mv --exchange release-old release-new
mv: cannot exchange 'release-old' and 'release-new/release-old': Unknown error -1

Look at the second path in the error: release-new/release-old. When the last argument is an existing directory, mv assumes you want to move things into it, just like a regular mv. So it tried to swap release-old with a path inside release-new that doesn't exist.

The fix is the -T (--no-target-directory) option, which tells mv to treat the last argument as a plain name instead of a destination folder:

mv -T --exchange release-old release-new
ls release-old release-new
release-new:
v1

release-old:
v2

Now the whole directory trees were swapped, no matter how many files they contain, because only the names changed.

Where it actually helps

Here are a few situations where I find mv --exchange useful:

  • Rolling out a new configuration. Swap the new config into place and keep the old one under the other name, ready for a quick rollback with the same command.
  • Switching release directories. If you deploy a new version of a site into a separate folder, you can swap it with the live folder in one step (remember the -T).
  • Undoing a swap. Running the same command again swaps the files back.

Limitations you should know

mv --exchange is not magic, and a few things can trip you up.

Both paths must be on the same filesystem

The swap only works when both files live on the same filesystem. If you try to exchange a file on one filesystem with a file in a tmpfs mount like /dev/shm, the kernel refuses the operation:

mv --exchange b.conf /dev/shm/x.conf
mv: cannot exchange 'b.conf' and '/dev/shm/x.conf': Unknown error -1

The message is not very helpful (it is the same "Unknown error -1" we saw in the directory mistake above), so it's worth knowing the real reason: the kernel can't swap names across two different filesystems.

Regular mv gets around this by copying the file and deleting the original, but that can't be done atomically, so --exchange doesn't even try.

mv --exchange failing when the files are on different filesystems

The filesystem must support it

The underlying system call needs filesystem support. Common Linux filesystems such as ext4, Btrfs, XFS and tmpfs support it.

Conclusion

mv --exchange is one of those small additions that removes a whole category of fiddly, error-prone shell work. If you are on a recent distribution like NixOS, Fedora or Debian 13, it is already on your system.

Next time you reach for a temporary file name to swap two things, try mv --exchange instead. Just remember to add -T when you swap directories.

✍️
Igor Giamoniano is a developer and teacher from São Paulo, Brazil. He contributes to the Brazilian Portuguese translation of the Linux kernel documentation and runs Coisa de Dev, where he teaches Linux and programming to a Brazilian audience. You can find his open source work on GitHub.


from It's FOSS https://ift.tt/3XKrNFl
via IFTTT

Systemd Wants Rust in, But its Core Will Have to Wait

systemd rust banner

systemd, the init system and service manager that most mainstream Linux distributions use, has merged support for writing its programs in Rust. It landed on the main branch through a pull request of 19 commits.

The pull request replaces an earlier proposal and follows rules the maintainers agreed upon at a recent hackfest in Berlin.

The first program to use it is systemd-keyring-setup, and it adds X.509 certificates to kernel keyrings, such as the dm-verity and fs-verity ones, at boot before locking them down.

If you remember, we recently talked about Amutable launching a preview for their new offering. Anyhow, let's see what they are up to now.

Rust, but on systemd's terms

With the approach they are following, Rust stays optional, and systemd can still be built without it.

The Rust code's scope is limited to new standalone programs that nothing else depends on, while everything builds with meson, excluding cargo from the equation. Only the core and libc crates are allowed, and that rules out the standard library and alloc.

Programs would use systemd's own Box and Vec types, and a failed allocation would return an error instead of panicking. A Rust program must also behave like its C counterparts, with a test checking this for programs that declare the same command.

Building Rust programs involves having rustc 1.85, bindgen 0.71.1, and meson 1.4.0 or newer.

Distributions that build systemd with every feature enabled, such as Arch and openSUSE OBS, will have to install the Rust toolchain or turn Rust support off.

The shared library problem

The library that systemd's programs share, libsystemd-shared, stays in C for now. Putting Rust in it would need proper shared library support from Rust itself, and the language still has no stable ABI.

Rust programs use that C library the same way C programs do, and putting Rust inside it would duplicate the same code across the library and many of systemd’s binaries.

Filesystem access is another hurdle, since systemd looks up paths through file descriptors to keep that step secure and does not accept Rust's standard path handling for its sensitive components. It would like Rust to support that approach as well.

systemd still wants Rust in its core and says it is open to work with the Rust community to get there.

A wave of rust

systemd is not the only part of the Linux stack making room for Rust.

The memory-safe language entered the Linux kernel with 6.1 as an exploratory effort, with the kernel maintainers declaring late last year that the experiment was over.

Ubuntu has been taking the same route with its core tools since some time now, when sudo-rs and uutils coreutils became the default experiences.

All that strongly suggests that the adoption of Rust will only accelerate as we go into a very busy 2027.



from It's FOSS https://ift.tt/5VEis61
via IFTTT