RethinkDB uses custom abstractions to hide the lower-level OS-specific code. We were able to port the low-level code to Windows with very little changes in these abstractions, and thus minimal changes to the rest of the code base.<p>The proper way to use libuv would be to replace those abstractions with libuv&#x27;s own, which would affect a lot more code and possibly break a lot of implicit invariants.<p>In retrospect, perhaps we should have given alternatives like libuv, libevent or boost::asio more consideration.