diff --git a/build.rs b/build.rs
index 8c04b16dfa0b1c8672405aac718686d67d26cb1b..296676966010403994c9be2b6fae78070965fd73 100644
--- a/build.rs
+++ b/build.rs
@@ -114,4 +114,8 @@ b"        files.clear();" // Silence mutability warning
     }
 }
     ").unwrap();
+
+    fn main() {
+        println!("cargo:rustc-env=TARGET={}", env::var("TARGET").unwrap());
+    }
 }
diff --git a/src/scheme/sys/mod.rs b/src/scheme/sys/mod.rs
index 39b8953d8486136f9deb8375e16b7943f83e9e57..a058dbfd4555439430467753f23f693097b37a71 100644
--- a/src/scheme/sys/mod.rs
+++ b/src/scheme/sys/mod.rs
@@ -15,6 +15,7 @@ mod exe;
 mod iostat;
 mod scheme;
 mod scheme_num;
+mod uname;
 //mod interrupt;
 //mod log;
 //mod test;
@@ -45,6 +46,7 @@ impl SysScheme {
         files.insert(b"iostat", Box::new(move || iostat::resource()));
         files.insert(b"scheme", Box::new(move || scheme::resource()));
         files.insert(b"scheme_num", Box::new(move || scheme_num::resource()));
+        files.insert(b"uname", Box::new(move || uname::resource()));
         //files.insert(b"interrupt", Box::new(move || interrupt::resource()));
         //files.insert(b"log", Box::new(move || log::resource()));
         //files.insert(b"test", Box::new(move || test::resource()));
diff --git a/src/scheme/sys/uname.rs b/src/scheme/sys/uname.rs
new file mode 100644
index 0000000000000000000000000000000000000000..29daef8c46adc814f43e3c46b7396dbf330be66a
--- /dev/null
+++ b/src/scheme/sys/uname.rs
@@ -0,0 +1,9 @@
+use collections::Vec;
+use syscall::error::Result;
+
+pub fn resource() -> Result<Vec<u8>> {
+    Ok(format!("Redox\n\n{}\n\n{}\n",
+               env!("CARGO_PKG_VERSION"),
+               env!("TARGET").split('-').next().unwrap()).into_bytes())
+}
+