First half of async API: init() and open()