let rec copy_rec source dest = let infos = lstat source in match infos.st_kind with | S_REG -> file_copy source dest; set_infos dest infos | S_LNK -> let link = readlink source in symlink link dest | S_DIR -> mkdir dest 0o200; Misc.iter_dir (fun file -> if file <> Filename.current_dir_name && file <> Filename.parent_dir_name then copy_rec (Filename.concat source file) (Filename.concat dest file)) source; set_infos dest infos | _ -> prerr_endline ("Can't cope with special file " ^ source)
That snippet is ugly. Cleaner OCaml is easier to maintain than the average bash blob if you care more about finding mistakes before prod than saving ten minutes on ML syntax.
https://www.informit.com/store/linux-application-development...
Judging by the publisher's sample,[1] the second edition (2025) looked like a worthwhile upgrade, so I ordered it. Much of the material is in the manpages, but this presents it with better explanations.
___
1. <https://ptgmedia.pearsoncmg.com/images/9780135325520/samplep...>
This one is good as well.
Static linking libraries for MacOS or Windows is contaminated by GPL/LGPL code, and this is why wxwidgets excludes the disclosure requirement.
Also, if you are looking for a VueJS cross-platform GUI framework for most Desktop and Mobile platforms (modern MacOS hardware and developer account is a requirement):
https://github.com/quasarframework/quasar
Qt5/Qt6 frameworks sooner or later cause more problems than they solve, and require a lot more maintenance/support.
Best of luck =3
People use LGPL libraries in commercial software all the time, as the shared objects (.so) do not contaminate the source application license. The instant someone static links LGPL/GPL lib into an application binary its source also must carry a compatible open license. Note this obligation differs from publishing patches back to the main lib branch.
It gets messy when people release libraries under multiple licenses. Porting games and applications from *nix systems can be non-trivial. Best regards =3