diff --git a/src/libraries/stdlib/extlib.ml b/src/libraries/stdlib/extlib.ml
index 3b0ee2265e7a1d1ff71f6cd8ae16129411840f89..832dbc10bfb000d4482b4abae8680f05c883f632 100644
--- a/src/libraries/stdlib/extlib.ml
+++ b/src/libraries/stdlib/extlib.ml
@@ -436,17 +436,12 @@ let temp_dir_cleanup_at_exit ?(debug=false) base =
   in
   try_dir_cleanup_at_exit 10 base
 
-(* replace "noalloc" with [@@noalloc] for OCaml version >= 4.03.0 *)
-[@@@ warning "-3"]
-external usleep: int -> unit = "ml_usleep" "noalloc"
-  (* In ../utils/c_bindings.c ; man usleep for details. *)
-
 (* ************************************************************************* *)
 (** Strings *)
 (* ************************************************************************* *)
 
-external compare_strings: string -> string -> int -> bool = "compare_strings" "noalloc"
-[@@@ warning "+3"]
+external compare_strings: string -> string -> int -> bool =
+  "compare_strings" [@@noalloc]
 
 let string_prefix ?(strict=false) prefix s =
   let add = if strict then 1 else 0 in
diff --git a/src/libraries/stdlib/extlib.mli b/src/libraries/stdlib/extlib.mli
index 6b8084f6922b7696e2566d6d94c14f37d2dbb6ac..50d3745f5506e63bd47700cd3e88dacfe35122c5 100644
--- a/src/libraries/stdlib/extlib.mli
+++ b/src/libraries/stdlib/extlib.mli
@@ -382,11 +382,6 @@ val safe_remove: string -> unit
 
 val safe_remove_dir: string -> unit
 
-val usleep: int -> unit
-  (** Unix function that sleep for [n] microseconds.
-      See [man usleep] for details.
-      Should not be used under Win32. *)
-
 (* ************************************************************************* *)
 (** Comparison functions *)
 (* ************************************************************************* *)
diff --git a/src/libraries/utils/c_bindings.c b/src/libraries/utils/c_bindings.c
index b03878d2dce1b398d0b097adcbf93c77abdea095..743f47dbda486bee34dd756dcae213b4f20708dc 100644
--- a/src/libraries/utils/c_bindings.c
+++ b/src/libraries/utils/c_bindings.c
@@ -253,9 +253,3 @@ value single_precision_of_string(value str)
   double d = f;
   return caml_copy_double(d);
 }
-
-value ml_usleep(value v)
-{
-  usleep( Int_val(v) );
-  return Val_unit ;
-}
diff --git a/src/libraries/utils/command.ml b/src/libraries/utils/command.ml
index be4593d70d7b70cf5d7ed8ce1ccc08dbd3e797ac..22ab26bbb6a8c694c5244c66eb5762068ce9e68d 100644
--- a/src/libraries/utils/command.ml
+++ b/src/libraries/utils/command.ml
@@ -259,7 +259,7 @@ let command ?(timeout=0) ?stdout ?stderr cmd args =
       | Result r ->
           res := r;
           false
-    in while running () do Extlib.usleep 100000 (* 0.1s *) done ; !res
+    in while running () do Unix.sleepf 0.1 done ; !res
   else
     let f = command_generic ~async:false ?stdout ?stderr cmd args in
     match f () with
diff --git a/src/libraries/utils/task.ml b/src/libraries/utils/task.ml
index 6dd5eb96cff7cf274d3bffcaab2e9ec22eceb6ae..164a847defba67d1c9dbdbe964127a9f570c01fb 100644
--- a/src/libraries/utils/task.ml
+++ b/src/libraries/utils/task.ml
@@ -109,7 +109,8 @@ struct
   let rec wait = function
     | UNIT a -> a
     | YIELD f -> Db.yield() ; wait (f Coin)
-    | WAIT(ms,f) -> Db.yield() ; Extlib.usleep ms ; wait (f Coin)
+    | WAIT(ms,f) ->
+      Db.yield() ; Unix.sleepf (float_of_int ms /. 1_000_000.); wait (f Coin)
 
   let finished = function UNIT a -> Some a | YIELD _ | WAIT _ -> None
 
@@ -341,7 +342,7 @@ let share sh = todo
 
 let on_idle = ref
     (fun f -> try
-        while f () do Extlib.usleep 50000 (* wait for 50ms *) done
+        while f () do Unix.sleepf 0.05 (* wait for 50ms *) done
       with Db.Cancel -> ())
 
 (* -------------------------------------------------------------------------- *)