add implementation for Linux and Windows and a small test