# Possible Future Features These are some features we're interested in, but don't have yet, and which will require some amount of design work. ## File Locking POSIX's answer is `fcntl` with `F_SETLK`/`F_GETLK`/etc., which provide advisory record locking. Unfortunately, these locks are associated with processes, which means that if two parts of a program independently open a file and try to lock it, if they're in the same process, they automatically share the lock. Other locking APIs exist on various platforms, but none is widely standardized. POSIX `F_SETLK`-style locking is used by SQLite. ## File change monitoring POSIX has no performant way to monitor many files or directories for changes. Many popular operating systems have system-specific APIs to do this though, so it'd be desirable to come up with a portable API to provide access to this functionality. ## Scalable event-based I/O POSIX's `select` and `poll` have the property that each time they're called, the implementation has to scan through all the file descriptors to report if any of them has I/O ready, which is inefficient when there are large numbers of open files or sockets. Many popular operating systems have system-specific APIs that provide alternative ways to monitor large numbers of I/O streams though, so it'd be desirable to come up with a portable API to provide access to this functionality. ## Crash recovery POSIX doesn't have clear guidance on what applications can expect their data will look like if the system crashes or the storage device is otherwise taken offline abruptly. We have `fsync` and `fdatasync`, but even these have been a topic of [much discussion]. [much discussion]: https://wiki.postgresql.org/wiki/Fsync_Errors Also, currently WASI's docs don't make any guarantees about things like `path_rename` being atomic.