diff -ruwN source/Cargo.lock source-new/Cargo.lock
--- source/Cargo.lock	2026-05-19 19:51:53.000000000 +0200
+++ source-new/Cargo.lock	2026-05-31 18:13:28.410658931 +0200
@@ -678,12 +678,12 @@
 
 [[package]]
 name = "fs4"
-version = "0.12.0"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c29c30684418547d476f0b48e84f4821639119c483b1eccd566c8cd0cd05f521"
+checksum = "7e72ed92b67c146290f88e9c89d60ca163ea417a446f61ffd7b72df3e7f1dfd5"
 dependencies = [
- "rustix 0.38.44",
- "windows-sys 0.52.0",
+ "rustix",
+ "windows-sys 0.61.2",
 ]
 
 [[package]]
@@ -1124,12 +1124,6 @@
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.4.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
-
-[[package]]
-name = "linux-raw-sys"
 version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
@@ -1167,7 +1161,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227"
 dependencies = [
- "rustix 1.1.4",
+ "rustix",
 ]
 
 [[package]]
@@ -1637,19 +1631,6 @@
 
 [[package]]
 name = "rustix"
-version = "0.38.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
-dependencies = [
- "bitflags",
- "errno",
- "libc",
- "linux-raw-sys 0.4.15",
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "rustix"
 version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
@@ -1657,7 +1638,7 @@
  "bitflags",
  "errno",
  "libc",
- "linux-raw-sys 0.12.1",
+ "linux-raw-sys",
  "windows-sys 0.61.2",
 ]
 
@@ -1882,7 +1863,7 @@
  "fastrand",
  "getrandom 0.4.2",
  "once_cell",
- "rustix 1.1.4",
+ "rustix",
  "windows-sys 0.61.2",
 ]
 
@@ -2427,7 +2408,7 @@
  "once_cell",
  "postcard",
  "pulley-interpreter",
- "rustix 1.1.4",
+ "rustix",
  "serde",
  "serde_derive",
  "smallvec",
@@ -2539,7 +2520,7 @@
  "cc",
  "cfg-if",
  "libc",
- "rustix 1.1.4",
+ "rustix",
  "wasmtime-internal-asm-macros",
  "wasmtime-internal-versioned-export-macros",
  "windows-sys 0.60.2",
@@ -2692,15 +2673,6 @@
 
 [[package]]
 name = "windows-sys"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
-dependencies = [
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows-sys"
 version = "0.59.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
diff -ruwN source/Cargo.toml source-new/Cargo.toml
--- source/Cargo.toml	2026-05-19 19:51:53.000000000 +0200
+++ source-new/Cargo.toml	2026-05-31 18:08:35.420476183 +0200
@@ -122,7 +122,7 @@
 ctrlc = { version = "3.5.0", features = ["termination"] }
 dialoguer = { version = "0.11.0", features = ["fuzzy-select"] }
 etcetera = "0.11.0"
-fs4 = "0.12.0"
+fs4 = "1"
 glob = "0.3.3"
 heck = "0.5.0"
 html-escape = "0.2.13"
diff -ruwN source/crates/cli/src/fuzz/allocations.rs source-new/crates/cli/src/fuzz/allocations.rs
--- source/crates/cli/src/fuzz/allocations.rs	2026-05-19 19:51:53.000000000 +0200
+++ source-new/crates/cli/src/fuzz/allocations.rs	2026-05-31 18:01:16.326230476 +0200
@@ -7,6 +7,7 @@
     },
 };
 
+#[cfg(not(target_os = "redox"))]
 #[ctor::ctor]
 unsafe fn initialize_allocation_recording() {
     tree_sitter::set_allocator(
diff -ruwN source/crates/loader/src/loader.rs source-new/crates/loader/src/loader.rs
--- source/crates/loader/src/loader.rs	2026-05-19 19:51:53.000000000 +0200
+++ source-new/crates/loader/src/loader.rs	2026-05-31 18:12:57.216936008 +0200
@@ -21,7 +21,7 @@
 };
 
 use etcetera::BaseStrategy as _;
-use fs4::fs_std::FileExt;
+use fs4::FileExt;
 use libloading::{Library, Symbol};
 use log::{error, info, warn};
 use once_cell::unsync::OnceCell;
@@ -1030,11 +1030,11 @@
 
         if let Ok(lock_file) = fs::OpenOptions::new().write(true).open(&lock_path) {
             recompile = false;
-            if lock_file.try_lock_exclusive().is_err() {
+            if lock_file.try_lock().is_err() {
                 // if we can't acquire the lock, another process is compiling the parser, wait for
                 // it and don't recompile
                 lock_file
-                    .lock_exclusive()
+                    .lock()
                     .map_err(|e| LoaderError::IO(IoError::new(e, Some(lock_path.as_path()))))?;
                 recompile = false;
             } else {
@@ -1067,7 +1067,7 @@
                 .open(&lock_path)
                 .map_err(|e| LoaderError::IO(IoError::new(e, Some(lock_path.as_path()))))?;
             lock_file
-                .lock_exclusive()
+                .lock()
                 .map_err(|e| LoaderError::IO(IoError::new(e, Some(lock_path.as_path()))))?;
 
             self.compile_parser_to_dylib(&config, &lock_file, &lock_path)?;
