This was already noted in 2006 http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=33125
NetBSD iconv(3): size_t iconv(iconv_t cd, const char ** restrict src, size_t * restrict srcleft, char ** restrict dst, size_t * restrict dstleft); It says that: Historically, the definition of iconv has not been consistent across operating systems. This is due to an unfortunate historical mistake, documented in this e-mail: https://www5.opengroup.org/sophocles2/show_mail.tpl?&source=L&listname=austin-group-l&id=7404. The standards page for the header file <iconv.h> defined the second argument of iconv() as char **, but the standards page for the iconv() implementation defined it as const char **. The standards committee later chose to change the function definition to follow the header file definition (without const), even though the version with const is arguably more correct. NetBSD has always used the const form. It was decided to reject the committee's regression and become (technically) incompatible. GNU libiconv has taken the same route: http://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.14/. Most third party software affected by this issue already handles it during configuration. It's no longer true for gnu libiconv. They gave up and removed "const" in 2009: http://git.savannah.gnu.org/cgit/libiconv.git/log/?qt=grep&q=iconv Perhaps we are the only ones left there and new software (like .NET or Qt5) no longer handles the "const" variation. Can we legalize the POSIX mistake from the past and align to the rest of world?