diff --git a/System/Process.hs b/System/Process.hs
--- a/System/Process.hs
+++ b/System/Process.hs
@@ -6,6 +6,8 @@
 #endif
 {-# LANGUAGE InterruptibleFFI #-}
 
+#include <ghcplatform.h>
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  System.Process
@@ -102,6 +104,11 @@
 
 import GHC.IO.Exception ( ioException, IOErrorType(..), IOException(..) )
 
+#if defined(wasm32_HOST_ARCH)
+import GHC.IO.Exception ( unsupportedOperation )
+import System.IO.Error
+#endif
+
 -- | The platform specific type for a process identifier.
 --
 -- This is always an integral type. Width and signedness are platform specific.
@@ -857,6 +864,19 @@
 -- ----------------------------------------------------------------------------
 -- Interface to C bits
 
+#if defined(wasm32_HOST_ARCH)
+
+c_terminateProcess :: PHANDLE -> IO CInt
+c_terminateProcess _ = ioError (ioeSetLocation unsupportedOperation "terminateProcess")
+
+c_getProcessExitCode :: PHANDLE -> Ptr CInt -> IO CInt
+c_getProcessExitCode _ _ = ioError (ioeSetLocation unsupportedOperation "getProcessExitCode")
+
+c_waitForProcess :: PHANDLE -> Ptr CInt -> IO CInt
+c_waitForProcess _ _ = ioError (ioeSetLocation unsupportedOperation "waitForProcess")
+
+#else
+
 foreign import ccall unsafe "terminateProcess"
   c_terminateProcess
         :: PHANDLE
@@ -874,6 +894,7 @@
         -> Ptr CInt
         -> IO CInt
 
+#endif
 
 -- ----------------------------------------------------------------------------
 -- Old deprecated variants
diff --git a/System/Process/Common.hs b/System/Process/Common.hs
--- a/System/Process/Common.hs
+++ b/System/Process/Common.hs
@@ -88,7 +88,7 @@
   std_in       :: StdStream,               -- ^ How to determine stdin
   std_out      :: StdStream,               -- ^ How to determine stdout
   std_err      :: StdStream,               -- ^ How to determine stderr
-  close_fds    :: Bool,                    -- ^ Close all file descriptors except stdin, stdout and stderr in the new process (on Windows, only works if std_in, std_out, and std_err are all Inherit). This implementation will call close an every fd from 3 to the maximum of open files, which can be slow for high maximum of open files.
+  close_fds    :: Bool,                    -- ^ Close all file descriptors except stdin, stdout and stderr in the new process (on Windows, only works if std_in, std_out, and std_err are all Inherit). This implementation will call close on every fd from 3 to the maximum of open files, which can be slow for high maximum of open files.
   create_group :: Bool,                    -- ^ Create a new process group
   delegate_ctlc:: Bool,                    -- ^ Delegate control-C handling. Use this for interactive console processes to let them handle control-C themselves (see below for details).
                                            --
@@ -190,6 +190,9 @@
 -- ProcessHandle type
 
 data ProcessHandle__ = OpenHandle { phdlProcessHandle :: PHANDLE }
+                     -- | 'OpenExtHandle' is only applicable for
+                     -- Windows platform. It represents [Job
+                     -- Objects](https://learn.microsoft.com/en-us/windows/win32/procthread/job-objects).
                      | OpenExtHandle { phdlProcessHandle :: PHANDLE
                                      -- ^ the process
                                      , phdlJobHandle     :: PHANDLE
diff --git a/System/Process/Posix.hs b/System/Process/Posix.hs
--- a/System/Process/Posix.hs
+++ b/System/Process/Posix.hs
@@ -1,5 +1,8 @@
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP #-}
+
+#include <ghcplatform.h>
+
 module System.Process.Posix
     ( mkProcessHandle
     , translateInternal
@@ -43,6 +46,10 @@
 
 import System.Process.Common hiding (mb_delegate_ctlc)
 
+#if defined(wasm32_HOST_ARCH)
+import System.IO.Error
+#endif
+
 #include "HsProcessConfig.h"
 #include "processFlags.h"
 
@@ -262,6 +269,27 @@
       where
         sig = fromIntegral (-n)
 
+#if defined(wasm32_HOST_ARCH)
+
+c_runInteractiveProcess
+        ::  Ptr CString
+        -> CString
+        -> Ptr CString
+        -> FD
+        -> FD
+        -> FD
+        -> Ptr FD
+        -> Ptr FD
+        -> Ptr FD
+        -> Ptr CGid
+        -> Ptr CUid
+        -> CInt                         -- flags
+        -> Ptr CString
+        -> IO PHANDLE
+c_runInteractiveProcess _ _ _ _ _ _ _ _ _ _ _ _ _ = ioError (ioeSetLocation unsupportedOperation "runInteractiveProcess")
+
+#else
+
 foreign import ccall unsafe "runInteractiveProcess"
   c_runInteractiveProcess
         ::  Ptr CString
@@ -278,6 +306,8 @@
         -> CInt                         -- flags
         -> Ptr CString
         -> IO PHANDLE
+
+#endif
 
 ignoreSignal, defaultSignal :: CLong
 ignoreSignal  = CONST_SIG_IGN
diff --git a/cbits/posix/fork_exec.c b/cbits/posix/fork_exec.c
--- a/cbits/posix/fork_exec.c
+++ b/cbits/posix/fork_exec.c
@@ -3,6 +3,8 @@
 
 #include "common.h"
 
+#if defined(HAVE_FORK)
+
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <errno.h>
@@ -327,3 +329,5 @@
 
     return pid;
 }
+
+#endif // HAVE_FORK
diff --git a/cbits/posix/posix_spawn.c b/cbits/posix/posix_spawn.c
--- a/cbits/posix/posix_spawn.c
+++ b/cbits/posix/posix_spawn.c
@@ -3,8 +3,11 @@
 
 #include <unistd.h>
 #include <errno.h>
+
+#if defined(HAVE_SIGNAL_H)
 #include <signal.h>
 #include <fcntl.h>
+#endif
 
 #if !defined(USE_POSIX_SPAWN)
 ProcHandle
diff --git a/cbits/posix/runProcess.c b/cbits/posix/runProcess.c
--- a/cbits/posix/runProcess.c
+++ b/cbits/posix/runProcess.c
@@ -7,6 +7,8 @@
 #include "runProcess.h"
 #include "common.h"
 
+#if defined(HAVE_FORK)
+
 #include <unistd.h>
 #include <errno.h>
 #include <sys/wait.h>
@@ -265,3 +267,5 @@
 
     return -1;
 }
+
+#endif // HAVE_FORK
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 # Changelog for [`process` package](http://hackage.haskell.org/package/process)
 
+## 1.6.17.0 *February 2023*
+
+* Improved documentation for the `OpenExtHandle` constructor.
+
 ## 1.6.16.0 *October 2022*
 
 * `posix_spawn`: Don't rely on addclose not failing for closed fds [#251](https://github.com/haskell/process/issues/251)
diff --git a/include/runProcess.h b/include/runProcess.h
--- a/include/runProcess.h
+++ b/include/runProcess.h
@@ -31,7 +31,11 @@
 
 #include "processFlags.h"
 
-#if !(defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32))
+#include <ghcplatform.h>
+
+#if defined(wasm32_HOST_ARCH)
+
+#elif !(defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32))
 
 #include <pwd.h>
 #include <grp.h>
diff --git a/process.cabal b/process.cabal
--- a/process.cabal
+++ b/process.cabal
@@ -1,5 +1,5 @@
 name:          process
-version:       1.6.16.0
+version:       1.6.17.0
 -- NOTE: Don't forget to update ./changelog.md
 license:       BSD3
 license-file:  LICENSE
@@ -81,7 +81,7 @@
 
     ghc-options: -Wall
 
-    build-depends: base      >= 4.10 && < 4.18,
+    build-depends: base      >= 4.10 && < 4.19,
                    directory >= 1.1 && < 1.4,
                    filepath  >= 1.2 && < 1.5,
                    deepseq   >= 1.1 && < 1.5
