// the find
Azure/azure-c-shared-utility
Azure C SDKs common code
This is the shared C utility layer that underpins the Azure IoT C SDKs — string handling, linked lists, TLS abstractions, HTTP, WebSockets, SAS tokens, and platform adapters for Linux, Windows, FreeRTOS, Mbed, and a handful of others. If you're writing an IoT device client in C that talks to Azure, this is the foundation it stands on. Not useful outside that context.
The platform adapter pattern is well-executed — TLS backends (SChannel, OpenSSL, WolfSSL, mbedTLS, BearSSL) are swappable at build time via CMake flags without touching application code. The devdoc directory has per-component requirements docs that serve as actual specs, which is rare in C projects and makes it easier to audit what a module is supposed to do. The test coverage is unit-test-first using their own umock-c framework, which is at least a real framework rather than hand-rolled stubs. Porting guide is thorough enough that getting this onto a new RTOS is a documented path, not a guessing game.
114 stars for a library that's been around this long signals it's a dependency people pull in, not one they choose — which means the API is designed for internal Azure SDK consumption, not general ergonomics, and it shows. The gballoc memory tracking layer is a global-state singleton with its own mutex; anything using it in a multi-library binary is asking for trouble. Error handling is old-school C integer returns with no consistent way to get a meaningful error message out. The cmake submodule chain (deps/ has 7 submodules) means a fresh clone without --recursive will silently fail to build in ways that produce confusing errors.