# Report: mawk vs gawk in OpenWRT SDK Context ## Introduction This report details the technical differences between `mawk` and `gawk` that led to the build failure of the Mosh package within the OpenWRT SDK environment. ## The failure The OpenWRT SDK build process failed with the following error: ``` awk: include/scan.awk: line 21: function asort never defined ``` This error occurred during the package scanning phase (`include/scan.mk`), which uses `awk` scripts to parse package definitions. ## mawk (Mike's AWK) - **Design Philosophy**: Built for speed and strict POSIX compliance. It is significantly faster than `gawk` for simple text processing tasks, which is why it is the default `awk` provider on many Debian-based minimal installations. - **Limitation**: It generally implements only the features defined in the POSIX standard for AWK. It lacks many GNU-specific extensions. - **Missing Feature**: complex sorting functions like `asort` and `asorti` are NOT part of the POSIX standard, and thus are absent in `mawk`. ## gawk (GNU AWK) - **design Philosophy**: The GNU implementation of AWK. It includes all POSIX features plus a vast array of extensions. - **Key Features**: - `asort()` / `asorti()`: Built-in functions for sorting arrays. - Network capabilities (`/inet/tcp/...`). - Bitwise operations (`and`, `or`, `xor`). - Time functions (`mktime`, `strftime`). - **OpenWRT Requirement**: The OpenWRT build system (scripts in `include/` and `scripts/`) relies heavily on these GNU extensions for dependency resolution and menu construction. Specifically, `asort` is used to deterministically order package lists. ## Conclusion The task was blocked because the system's `/usr/bin/awk` pointed to `mawk`. The OpenWRT SDK assumes a full-featured `gawk` environment. Although `mawk` is faster, it is functionally insufficient for the complex logic contained in OpenWRT's build scripts. Now that `gawk` is installed, the SDK scripts will be able to execute the `asort` function and proceed with the build.