title: why golang chose syscall rather than libc
body: <p>Go wraps all syscall-s in package syscall, just like what libc does if I understand them right.</p>
  
  <p>I've researched a few languages,</p>
  
  <ul>
  <li><p>Haskell, using libc in compiler and the libraries normally use it too, although there is a few libraries wrapping syscall for users.</p></li>
  <li><p>Java and almost all JVM languages choosing libc.</p></li>
  </ul>
  
  <p>No need mention script languages, such as lua, ruby or python, they need portable, so they need libc as an implementation of POSIX.</p>
  
  <p>I didn't use rust recently, but there are some people just said rust using libc too.</p>
  
  <p>So, why golang decided to implement a syscall package at first. It's not portable, cost more people to port to each kernel, even each major version of the same kernel.</p>