diff --git a/Bindings/Uname.hsc b/Bindings/Uname.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/Uname.hsc
@@ -0,0 +1,54 @@
+module Bindings.Uname
+    ( Utsname
+    , uname
+
+    , sysname
+    , nodename
+    , release
+    , version
+    , machine
+    )
+    where
+
+#include <sys/utsname.h>
+
+import Foreign
+import Foreign.C
+
+-- | @'uname' name@ stores nul-terminated strings of information
+--   identifying the current system info to the structure referenced
+--   by name.
+--
+--   > import Foreign.C
+--   > import Foreign.Marshal
+--   >
+--   > sysName :: IO String
+--   > sysName = alloca $ \ ptr ->
+--   >           do throwErrnoIfMinus1_ "uname" $ uname ptr
+--   >              peekCString $ sysname ptr
+--
+foreign import ccall unsafe "sys/utsname.h uname"
+        uname :: Ptr Utsname -> IO CInt
+
+data Utsname
+
+instance Storable Utsname where
+    sizeOf    = const #size struct utsname
+    alignment = sizeOf
+    poke      = error "Storable Utsname: peek: unsupported operation"
+    peek      = error "Storable Utsname: poke: unsupported operation"
+
+sysname :: Ptr Utsname -> CString
+sysname = (#ptr struct utsname, sysname)
+
+nodename :: Ptr Utsname -> CString
+nodename = (#ptr struct utsname, nodename)
+
+release :: Ptr Utsname -> CString
+release = (#ptr struct utsname, release)
+
+version :: Ptr Utsname -> CString
+version = (#ptr struct utsname, version)
+
+machine :: Ptr Utsname -> CString
+machine = (#ptr struct utsname, machine)
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMainWithHooks simpleUserHooks
diff --git a/bindings-uname.cabal b/bindings-uname.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-uname.cabal
@@ -0,0 +1,30 @@
+Name:                bindings-uname
+Version:             0.1
+Synopsis:            Low-level binding to POSIX uname(3)
+Description:
+        This is a low-level binding to POSIX uname(3)
+        function. Perhaps it shoule be part of unix package.
+Category:            FFI, System
+License:             PublicDomain
+Author:              PHO <pho at cielonegro.org>
+Maintainer:          PHO <pho at cielonegro.org>
+Stability:           Experimental
+Cabal-Version:       >= 1.6
+Build-Type:          Simple
+
+Source-Repository head
+    Type: git
+    Location: git://git.cielonegro.org/bindings-uname
+
+Library
+    Build-Depends:
+        base < 5
+
+    Exposed-Modules:
+        Bindings.Uname
+
+    Extensions:
+        EmptyDataDecls, ForeignFunctionInterface
+
+    GHC-Options:
+        -Wall
