diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am
index ff30af7d2b..5a89b60a59 100644
--- a/lib/libzpool/Makefile.am
+++ b/lib/libzpool/Makefile.am
@@ -12,6 +12,7 @@ CPPCHECKTARGETS += libzpool.la
 
 dist_libzpool_la_SOURCES = \
 	%D%/abd_os.c \
+	%D%/arc_os.c \
 	%D%/kernel.c \
 	%D%/taskq.c \
 	%D%/util.c
@@ -42,7 +43,6 @@ nodist_libzpool_la_SOURCES = \
 	module/lua/lvm.c \
 	module/lua/lzio.c \
 	\
-	module/os/linux/zfs/arc_os.c \
 	module/os/linux/zfs/trace.c \
 	module/os/linux/zfs/vdev_file.c \
 	module/os/linux/zfs/vdev_label_os.c \
diff --git a/lib/libzpool/arc_os.c b/lib/libzpool/arc_os.c
new file mode 100644
index 0000000000..ed99322ddb
--- /dev/null
+++ b/lib/libzpool/arc_os.c
@@ -0,0 +1,87 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or https://opensource.org/licenses/CDDL-1.0.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Joyent, Inc.
+ * Copyright (c) 2011, 2019 by Delphix. All rights reserved.
+ * Copyright (c) 2014 by Saso Kiselkov. All rights reserved.
+ * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
+ */
+
+#include <sys/zfs_context.h>
+#include <sys/arc_impl.h>
+
+/*
+ * Return a default max arc size based on the amount of physical memory.
+ * This may be overridden by tuning the zfs_arc_max module parameter.
+ */
+uint64_t
+arc_default_max(uint64_t min, uint64_t allmem)
+{
+	uint64_t size;
+
+	if (allmem >= 1 << 30)
+		size = allmem - (1 << 30);
+	else
+		size = min;
+	return (MAX(allmem * 5 / 8, size));
+}
+
+int64_t
+arc_available_memory(void)
+{
+	int64_t lowest = INT64_MAX;
+
+	/* Every 100 calls, free a small amount */
+	if (random_in_range(100) == 0)
+		lowest = -1024;
+
+	return (lowest);
+}
+
+int
+arc_memory_throttle(spa_t *spa, uint64_t reserve, uint64_t txg)
+{
+	(void) spa, (void) reserve, (void) txg;
+	return (0);
+}
+
+uint64_t
+arc_all_memory(void)
+{
+	return (ptob(physmem) / 2);
+}
+
+uint64_t
+arc_free_memory(void)
+{
+	return (random_in_range(arc_all_memory() * 20 / 100));
+}
+
+void
+arc_register_hotplug(void)
+{
+}
+
+void
+arc_unregister_hotplug(void)
+{
+}
diff --git a/module/os/linux/zfs/arc_os.c b/module/os/linux/zfs/arc_os.c
index c6b9cb2ddb..b1e45b2874 100644
--- a/module/os/linux/zfs/arc_os.c
+++ b/module/os/linux/zfs/arc_os.c
@@ -42,7 +42,6 @@
 #include <sys/abd.h>
 #include <sys/zil.h>
 #include <sys/fm/fs/zfs.h>
-#ifdef _KERNEL
 #include <sys/shrinker.h>
 #include <sys/vmsystm.h>
 #include <sys/zpl.h>
@@ -50,7 +49,6 @@
 #include <linux/notifier.h>
 #include <linux/memory.h>
 #include <linux/version.h>
-#endif
 #include <sys/callb.h>
 #include <sys/kstat.h>
 #include <sys/zthr.h>
@@ -59,7 +57,6 @@
 #include <sys/trace_zfs.h>
 #include <sys/aggsum.h>
 
-#ifdef _KERNEL
 /*
  * This is a limit on how many pages the ARC shrinker makes available for
  * eviction in response to one page allocation attempt.  Note that in
@@ -87,7 +84,6 @@ static int zfs_arc_shrinker_seeks = DEFAULT_SEEKS;
 #ifdef CONFIG_MEMORY_HOTPLUG
 static struct notifier_block arc_hotplug_callback_mem_nb;
 #endif
-#endif
 
 /*
  * Return a default max arc size based on the amount of physical memory.
@@ -105,7 +101,6 @@ arc_default_max(uint64_t min, uint64_t allmem)
 	return (MAX(allmem * 5 / 8, size));
 }
 
-#ifdef _KERNEL
 /*
  * Return maximum amount of memory that we could possibly use.  Reduced
  * to half of all memory in user space which is primarily used for testing.
@@ -459,48 +454,6 @@ arc_unregister_hotplug(void)
 	unregister_memory_notifier(&arc_hotplug_callback_mem_nb);
 #endif
 }
-#else /* _KERNEL */
-int64_t
-arc_available_memory(void)
-{
-	int64_t lowest = INT64_MAX;
-
-	/* Every 100 calls, free a small amount */
-	if (random_in_range(100) == 0)
-		lowest = -1024;
-
-	return (lowest);
-}
-
-int
-arc_memory_throttle(spa_t *spa, uint64_t reserve, uint64_t txg)
-{
-	(void) spa, (void) reserve, (void) txg;
-	return (0);
-}
-
-uint64_t
-arc_all_memory(void)
-{
-	return (ptob(physmem) / 2);
-}
-
-uint64_t
-arc_free_memory(void)
-{
-	return (random_in_range(arc_all_memory() * 20 / 100));
-}
-
-void
-arc_register_hotplug(void)
-{
-}
-
-void
-arc_unregister_hotplug(void)
-{
-}
-#endif /* _KERNEL */
 
 ZFS_MODULE_PARAM(zfs_arc, zfs_arc_, shrinker_limit, INT, ZMOD_RW,
 	"Limit on number of pages that ARC shrinker can reclaim at once");