diff --git a/System/Posix/Env/PosixString.hsc b/System/Posix/Env/PosixString.hsc
index 3c435bd019789d9934cecfb4f50eb69ba8df0d80..30d549eea45501ffd583b0f7bf7e8971fff2de65 100644
--- a/System/Posix/Env/PosixString.hsc
+++ b/System/Posix/Env/PosixString.hsc
@@ -1,4 +1,5 @@
 {-# LANGUAGE CApiFFI #-}
+{-# LANGUAGE PackageImports #-}
 
 -----------------------------------------------------------------------------
 -- |
@@ -42,7 +43,11 @@ import GHC.IO.Encoding.Failure ( CodingFailureMode(..) )
 import System.Posix.Env ( clearEnv )
 import System.OsPath.Posix
 import System.OsString.Internal.Types
-import qualified System.OsPath.Data.ByteString.Short as B
+#if MIN_VERSION_filepath(1, 5, 0)
+import qualified "os-string" System.OsString.Data.ByteString.Short as B
+#else
+import qualified "filepath" System.OsPath.Data.ByteString.Short as B
+#endif
 import Data.ByteString.Short.Internal ( copyToPtr )
 
 import qualified System.Posix.Env.Internal as Internal
diff --git a/System/Posix/PosixPath/FilePath.hsc b/System/Posix/PosixPath/FilePath.hsc
index 55be06742d2d3c04f7341c01c7af6a18226b6dc4..1f07ee39433ef1dac49e34536fafb8fad2fb5e1b 100644
--- a/System/Posix/PosixPath/FilePath.hsc
+++ b/System/Posix/PosixPath/FilePath.hsc
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE PackageImports #-}
 
 -----------------------------------------------------------------------------
 -- |
@@ -45,7 +46,11 @@ import Data.ByteString.Internal (c_strlen)
 import Control.Monad
 import Control.Exception
 import System.OsPath.Posix as PS
-import System.OsPath.Data.ByteString.Short as BSS
+#if MIN_VERSION_filepath(1, 5, 0)
+import "os-string" System.OsString.Data.ByteString.Short as BSS
+#else
+import "filepath" System.OsPath.Data.ByteString.Short as BSS
+#endif
 import Prelude hiding (FilePath)
 import System.OsString.Internal.Types (PosixString(..), pattern PS)
 import GHC.IO.Exception
diff --git a/System/Posix/Process/PosixString.hsc b/System/Posix/Process/PosixString.hsc
index 7994bff0e079f95a4634785f9dee842b73709b52..10b001c71a6ae9e5a04822bf8fb10f02f2c54e57 100644
--- a/System/Posix/Process/PosixString.hsc
+++ b/System/Posix/Process/PosixString.hsc
@@ -1,3 +1,4 @@
+{-# LANGUAGE PackageImports #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  System.Posix.Process.PosixString
@@ -79,7 +80,11 @@ import Foreign.C hiding (
 
 import System.OsPath.Types
 import System.OsString.Internal.Types (PosixString(..))
-import qualified System.OsPath.Data.ByteString.Short as BC
+#if MIN_VERSION_filepath(1, 5, 0)
+import qualified "os-string" System.OsString.Data.ByteString.Short as BC
+#else
+import qualified "filepath" System.OsPath.Data.ByteString.Short as BC
+#endif
 
 import System.Posix.PosixPath.FilePath
 
diff --git a/System/Posix/Temp/PosixString.hsc b/System/Posix/Temp/PosixString.hsc
index c909381b3c758b47d715dc97faf072c712fd1990..88c73321f0c0ca0f0230167aa6171054b12ccbc5 100644
--- a/System/Posix/Temp/PosixString.hsc
+++ b/System/Posix/Temp/PosixString.hsc
@@ -1,4 +1,5 @@
 {-# LANGUAGE CApiFFI #-}
+{-# LANGUAGE PackageImports #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  System.Posix.Temp.PosixString
@@ -20,7 +21,11 @@ module System.Posix.Temp.PosixString (
 
 #include "HsUnix.h"
 
-import qualified System.OsPath.Data.ByteString.Short as BC
+#if MIN_VERSION_filepath(1, 5, 0)
+import qualified "os-string" System.OsString.Data.ByteString.Short as BC
+#else
+import qualified "filepath" System.OsPath.Data.ByteString.Short as BC
+#endif
 import Data.Word
 
 import Foreign.C
diff --git a/tests/T13660.hs b/tests/T13660.hs
index d7867e994ef7f2b37580e3d2188841be59dc6d3b..32e2056ba741f75af0337af6841c58d185b8b125 100644
--- a/tests/T13660.hs
+++ b/tests/T13660.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PackageImports #-}
 
 module Main where
 
@@ -15,7 +16,11 @@ import System.Posix.IO (defaultFileFlags, OpenFileFlags(..), OpenMode(..))
 import System.Posix.ByteString.FilePath
 
 import qualified Data.ByteString.Char8 as C
-import qualified System.OsPath.Data.ByteString.Short as SBS
+#if MIN_VERSION_filepath(1, 5, 0)
+import qualified "os-string" System.OsString.Data.ByteString.Short as SBS
+#else
+import qualified "filepath" System.OsPath.Data.ByteString.Short as SBS
+#endif
 import qualified System.Posix.Env.PosixString as PS
 import qualified System.Posix.IO.PosixString as PS
 import qualified System.Posix.IO.ByteString as BS
diff --git a/unix.cabal b/unix.cabal
index 380b72fd6d3ca20718d1902872da1c834d338f5b..13942259dbf23f3e1d89f4acd62aab7736aaeb64 100644
--- a/unix.cabal
+++ b/unix.cabal
@@ -45,6 +45,11 @@ extra-tmp-files:
     include/HsUnixConfig.h
     unix.buildinfo
 
+flag os-string
+  description: Use the new os-string package
+  default: False
+  manual: False
+
 source-repository head
     type:     git
     location: https://github.com/haskell/unix.git
@@ -71,9 +76,13 @@ library
     build-depends:
         base        >= 4.12.0.0  && < 4.20,
         bytestring  >= 0.9.2     && < 0.13,
-        filepath    >= 1.4.100.0 && < 1.5,
         time        >= 1.9.1     && < 1.13
 
+    if flag(os-string)
+      build-depends: filepath >= 1.5.0.0, os-string >= 2.0.0
+    else
+      build-depends: filepath >= 1.4.100.0 && < 1.5.0.0
+
     exposed-modules:
         System.Posix
         System.Posix.ByteString
@@ -172,7 +181,11 @@ test-suite unix-tests
         Signals001
     type: exitcode-stdio-1.0
     default-language: Haskell2010
-    build-depends: base, bytestring, filepath, tasty, tasty-hunit, tasty-quickcheck, unix
+    build-depends: base, bytestring, tasty, tasty-hunit, tasty-quickcheck, unix
+    if flag(os-string)
+      build-depends: filepath >= 1.5.0.0, os-string >= 2.0.0
+    else
+      build-depends: filepath >= 1.4.100.0 && < 1.5.0.0
     ghc-options: -Wall -with-rtsopts=-V0
 
 test-suite FdReadBuf001
@@ -362,5 +375,9 @@ test-suite T13660
     main-is: T13660.hs
     type: exitcode-stdio-1.0
     default-language: Haskell2010
-    build-depends: base, unix, filepath >= 1.4.100.0 && < 1.5, bytestring
+    build-depends: base, unix, bytestring
+    if flag(os-string)
+      build-depends: filepath >= 1.5.0.0, os-string >= 2.0.0
+    else
+      build-depends: filepath >= 1.4.100.0 && < 1.5.0.0
     ghc-options: -Wall