diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs
index 6ca1f20468f882bb7aded29d2496c460cb90914c..73f1e3014fdbe68f57668f9351b16f2d9df0a1c4 100644
--- a/src/scheme/mod.rs
+++ b/src/scheme/mod.rs
@@ -21,12 +21,10 @@ use self::env::EnvScheme;
 use self::initfs::InitFsScheme;
 use self::irq::IrqScheme;
 use self::memory::MemoryScheme;
-use self::null::NullScheme;
 use self::pipe::PipeScheme;
 use self::root::RootScheme;
 use self::sys::SysScheme;
 use self::time::TimeScheme;
-use self::zero::ZeroScheme;
 
 /// `debug:` - provides access to serial console
 pub mod debug;
@@ -50,9 +48,6 @@ pub mod live;
 /// `memory:` - a scheme for accessing physical memory
 pub mod memory;
 
-/// `null:` - a scheme that will discard all writes, and read no bytes
-pub mod null;
-
 /// `pipe:` - used internally by the kernel to implement `pipe`
 pub mod pipe;
 
@@ -68,9 +63,6 @@ pub mod time;
 /// A wrapper around userspace schemes, tightly dependent on `root`
 pub mod user;
 
-/// `zero:` - a scheme that will discard all writes, and always fill read buffers with zero
-pub mod zero;
-
 /// Limit on number of schemes
 pub const SCHEME_MAX_SCHEMES: usize = 65536;
 
@@ -117,10 +109,8 @@ impl SchemeList {
         self.insert(ns, Box::new(*b"event"), |_| Arc::new(Box::new(EventScheme::new()))).unwrap();
         self.insert(ns, Box::new(*b"env"), |_| Arc::new(Box::new(EnvScheme::new()))).unwrap();
         self.insert(ns, Box::new(*b"memory"), |_| Arc::new(Box::new(MemoryScheme))).unwrap();
-        self.insert(ns, Box::new(*b"null"), |_| Arc::new(Box::new(NullScheme))).unwrap();
         self.insert(ns, Box::new(*b"sys"), |_| Arc::new(Box::new(SysScheme::new()))).unwrap();
         self.insert(ns, Box::new(*b"time"), |scheme_id| Arc::new(Box::new(TimeScheme::new(scheme_id)))).unwrap();
-        self.insert(ns, Box::new(*b"zero"), |_| Arc::new(Box::new(ZeroScheme))).unwrap();
 
         ns
     }
diff --git a/src/scheme/null.rs b/src/scheme/null.rs
deleted file mode 100644
index 3906d32de6dfcea7dba8bdd6f11bf57077be92bd..0000000000000000000000000000000000000000
--- a/src/scheme/null.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-use syscall::error::*;
-use syscall::scheme::Scheme;
-
-pub struct NullScheme;
-
-impl Scheme for NullScheme {
-    fn open(&self, _path: &[u8], _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
-        Ok(0)
-    }
-
-    fn dup(&self, _file: usize, buf: &[u8]) -> Result<usize> {
-        if ! buf.is_empty() {
-            return Err(Error::new(EINVAL));
-        }
-
-        Ok(0)
-    }
-
-    /// Read the file `number` into the `buffer`
-    ///
-    /// Returns the number of bytes read
-    fn read(&self, _file: usize, _buf: &mut [u8]) -> Result<usize> {
-        Ok(0)
-    }
-
-    /// Write the `buffer` to the `file`
-    ///
-    /// Returns the number of bytes written
-    fn write(&self, _file: usize, buffer: &[u8]) -> Result<usize> {
-        Ok(buffer.len())
-    }
-
-    fn fcntl(&self, _id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
-        Ok(0)
-    }
-
-    fn fpath(&self, _id: usize, buf: &mut [u8]) -> Result<usize> {
-        let mut i = 0;
-        let scheme_path = b"null:";
-        while i < buf.len() && i < scheme_path.len() {
-            buf[i] = scheme_path[i];
-            i += 1;
-        }
-        Ok(i)
-    }
-
-    fn fsync(&self, _file: usize) -> Result<usize> {
-        Ok(0)
-    }
-
-    /// Close the file `number`
-    fn close(&self, _file: usize) -> Result<usize> {
-        Ok(0)
-    }
-}
diff --git a/src/scheme/zero.rs b/src/scheme/zero.rs
deleted file mode 100644
index 05b1cdcff20f8ca364fe5f6c76854d296b6be2cc..0000000000000000000000000000000000000000
--- a/src/scheme/zero.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-use syscall::error::*;
-use syscall::scheme::Scheme;
-
-pub struct ZeroScheme;
-
-impl Scheme for ZeroScheme {
-    fn open(&self, _path: &[u8], _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
-        Ok(0)
-    }
-
-    fn dup(&self, _file: usize, buf: &[u8]) -> Result<usize> {
-        if ! buf.is_empty() {
-            return Err(Error::new(EINVAL));
-        }
-
-        Ok(0)
-    }
-
-    /// Read the file `number` into the `buffer`
-    ///
-    /// Returns the number of bytes read
-    fn read(&self, _file: usize, buf: &mut [u8]) -> Result<usize> {
-        let mut i = 0;
-        while i < buf.len() {
-            buf[i] = 0;
-            i += 1;
-        }
-        Ok(i)
-    }
-
-    /// Write the `buffer` to the `file`
-    ///
-    /// Returns the number of bytes written
-    fn write(&self, _file: usize, buffer: &[u8]) -> Result<usize> {
-        Ok(buffer.len())
-    }
-
-    fn fcntl(&self, _id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
-        Ok(0)
-    }
-
-    fn fpath(&self, _id: usize, buf: &mut [u8]) -> Result<usize> {
-        let mut i = 0;
-        let scheme_path = b"zero:";
-        while i < buf.len() && i < scheme_path.len() {
-            buf[i] = scheme_path[i];
-            i += 1;
-        }
-        Ok(i)
-    }
-
-    fn fsync(&self, _file: usize) -> Result<usize> {
-        Ok(0)
-    }
-
-    /// Close the file `number`
-    fn close(&self, _file: usize) -> Result<usize> {
-        Ok(0)
-    }
-}