diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index fa33ff609ebb405b36b1587c72a219d5023db7dc..4f039dc8d56c0d86bf46b409f9771fe5f681edf6 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -75,7 +75,7 @@ jobs:
     - name: Install
       run: |
         apt-get update -y
-        apt-get install -y autoconf build-essential zlib1g-dev libgmp-dev curl libncurses5 libtinfo5 libncurses5-dev libtinfo-dev
+        apt-get install -y autoconf build-essential zlib1g-dev libgmp-dev curl libncurses5 libtinfo5 libncurses5-dev libtinfo-dev git
         curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=1 sh
     - uses: actions/checkout@v1
     - name: Test
diff --git a/System/OsPath/Data/ByteString/Short.hs b/System/OsPath/Data/ByteString/Short.hs
index f3a666ff541cd413c462d74c061ef91229f25a3e..c8265bd82671a6c4a28b51b5e1bc9ca1f60ebc7d 100644
--- a/System/OsPath/Data/ByteString/Short.hs
+++ b/System/OsPath/Data/ByteString/Short.hs
@@ -23,7 +23,9 @@
 --
 -- > import qualified Data.ByteString.Short as B.Short
 --
-module System.OsPath.Data.ByteString.Short (
+module System.OsPath.Data.ByteString.Short {-# DEPRECATED "Use System.OsString.Data.ByteString.Short from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-}
+
+ (
 
     -- * The @ShortByteString@ type
 
diff --git a/System/OsPath/Data/ByteString/Short/Internal.hs b/System/OsPath/Data/ByteString/Short/Internal.hs
index 5003f99826f348434772cdefe472609cb547df93..faf1408e50135c23953c3a9501c4ed15e6e6c806 100644
--- a/System/OsPath/Data/ByteString/Short/Internal.hs
+++ b/System/OsPath/Data/ByteString/Short/Internal.hs
@@ -17,7 +17,7 @@
 --
 -- Internal low-level utilities mostly for 'System.OsPath.Data.ByteString.Short.Word16',
 -- such as byte-array operations and other stuff not meant to be exported from Word16 module.
-module System.OsPath.Data.ByteString.Short.Internal where
+module System.OsPath.Data.ByteString.Short.Internal {-# DEPRECATED "Use System.OsString.Data.ByteString.Short.Internal from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-} where
 
 import Control.Monad.ST
 import Control.Exception (assert, throwIO)
diff --git a/System/OsPath/Data/ByteString/Short/Word16.hs b/System/OsPath/Data/ByteString/Short/Word16.hs
index 6ad8134beb86e0de6d3dbe0dbe4d2a50ba8be3b3..c3b3ca485e423334d41037abb52885fef57b21d2 100644
--- a/System/OsPath/Data/ByteString/Short/Word16.hs
+++ b/System/OsPath/Data/ByteString/Short/Word16.hs
@@ -29,7 +29,7 @@
 --
 -- All functions will error out if the input string is not a valid UTF16 stream (uneven number of bytes).
 -- So use this module with caution.
-module System.OsPath.Data.ByteString.Short.Word16 (
+module System.OsPath.Data.ByteString.Short.Word16 {-# DEPRECATED "Use System.OsString.Data.ByteString.Short.Word16 from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-} (
     -- * The @ShortByteString@ type and representation
     ShortByteString(..),
 
diff --git a/System/OsPath/Encoding/Internal.hs b/System/OsPath/Encoding/Internal.hs
index 1ae1c85aaff33182f1f1882d6b109f6cc1b61c86..218ad370ff8e5907832dd784b3ce7b0af05ffc4d 100644
--- a/System/OsPath/Encoding/Internal.hs
+++ b/System/OsPath/Encoding/Internal.hs
@@ -6,7 +6,7 @@
 {-# OPTIONS_GHC  -funbox-strict-fields #-}
 
 
-module System.OsPath.Encoding.Internal where
+module System.OsPath.Encoding.Internal {-# DEPRECATED "Use System.OsString.Encoding.Internal from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-} where
 
 import qualified System.OsPath.Data.ByteString.Short as BS8
 import qualified System.OsPath.Data.ByteString.Short.Word16 as BS16
diff --git a/System/OsString.hs b/System/OsString.hs
index c11a4bdf9891e28c62aebbb49b8458dc5ebf2bb8..0325fd63aff5f27feb0c600ffcdb3e3d050acf01 100644
--- a/System/OsString.hs
+++ b/System/OsString.hs
@@ -14,7 +14,7 @@
 --
 -- It captures the notion of syscall specific encoding (or the lack thereof) to avoid roundtrip issues
 -- and memory fragmentation by using unpinned byte arrays. Bytes are not touched or interpreted.
-module System.OsString
+module System.OsString {-# DEPRECATED "Use System.OsString from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-}
   (
   -- * String types
     OsString
diff --git a/System/OsString/Common.hs b/System/OsString/Common.hs
index 80eb69b5be74c68eb75d3304291b02322f5c7eb9..0ec7615d66ebe02e325807339f9fb2f248b0755f 100644
--- a/System/OsString/Common.hs
+++ b/System/OsString/Common.hs
@@ -11,7 +11,7 @@
 #define POSIX_DOC
 #endif
 
-module System.OsString.MODULE_NAME
+module System.OsString.MODULE_NAME {-# DEPRECATED "Use System.OsString.MODULE_NAME from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-}
   (
   -- * Types
 #ifdef WINDOWS
diff --git a/System/OsString/Internal.hs b/System/OsString/Internal.hs
index f72fdcb706ae801d2e0fa75b18185d0e8ca78f19..a7639af68b5443a856f61300c070bcb19ffb6b62 100644
--- a/System/OsString/Internal.hs
+++ b/System/OsString/Internal.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE UnliftedFFITypes #-}
 
-module System.OsString.Internal where
+module System.OsString.Internal {-# DEPRECATED "Use System.OsString.Internal from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-} where
 
 import System.OsString.Internal.Types
 
diff --git a/System/OsString/Internal/Types.hs b/System/OsString/Internal/Types.hs
index 33f960ffe79e34b95778cddbb9bdffb811d52f7a..2f7c22590eedd4fe67d8c1f52e73f6ea66b47d4f 100644
--- a/System/OsString/Internal/Types.hs
+++ b/System/OsString/Internal/Types.hs
@@ -8,7 +8,7 @@
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE PatternSynonyms #-}
 
-module System.OsString.Internal.Types
+module System.OsString.Internal.Types {-# DEPRECATED "Use System.OsString.Internal.Types from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-}
   (
     WindowsString(..)
   , pattern WS
diff --git a/System/OsString/Types.hs b/System/OsString/Types.hs
index 896c3b212647e4adfa3b755b0fb420d325d9a629..67a4e116d7c5c20b697ba521c34a1a32274c994a 100644
--- a/System/OsString/Types.hs
+++ b/System/OsString/Types.hs
@@ -1,4 +1,4 @@
-module System.OsString.Types
+module System.OsString.Types {-# DEPRECATED "Use System.OsString.Types from os-string >= 2.0.0 package instead. This module will be removed in filepath >= 1.5." #-}
   (
     WindowsString
   , PosixString
diff --git a/changelog.md b/changelog.md
index a5bca4393e1d6d39a34bfe8c7ca11f9f44248dd5..feafae2c2cfef8300f69891564cfc7cf53e97e0c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,10 @@
 
 _Note: below all `FilePath` values are unquoted, so `\\` really means two backslashes._
 
+## 1.4.200.0 *Jul 2023*
+
+* deprecate `OsString` modules
+
 ## 1.4.100.4 *Jul 2023*
 
 * Fix isInfixOf and breakSubString in Word16, wrt [#195](https://github.com/haskell/filepath/issues/195)
diff --git a/filepath.cabal b/filepath.cabal
index c3b76370531fe9cd82e398f6690aba4e7e815f46..a44b2066125058923df1c7f99a9a4dd644e3ef67 100644
--- a/filepath.cabal
+++ b/filepath.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               filepath
-version:            1.4.100.4
+version:            1.4.200.0
 
 -- NOTE: Don't forget to update ./changelog.md
 license:            BSD-3-Clause