====== PDCLib ====== ===== The Public Domain C Library ===== [[https://github.com/DevSolar/pdclib | Source Web-View]] -- [[pdclib:blog | Development Blog]] -- [[pdclib:drawingboard | Drawing Board]] -- [[https://github.com/DevSolar/pdclib/issues | Issue Tracker (GitHub)]] ==== What? ==== PDCLib is aiming at providing a fully conforming implementation of the C standard library (as defined by ISO/IEC 9899), under the licensing terms of [[https://creativecommons.org/share-your-work/public-domain/cc0/ | CC0 -- "No rights reserved"]]. PDCLib is a project predicated on the belief that some building blocks are so fundamental that they should be available freely - free of restrictions, free of license boilerplate and free of politics. Unfortunately, in the modern world this turns out to be difficult: the sum of rights that one must waive is large and complex, and in some countries (e.g. Germany) it is not even possible for an author to assign their work to the Public Domain. As a result, we have done the closest thing possible: placed PDCLib under Creative Commons Zero. This means that we have waived as many applicable rights as possible under law, and whenever the law has prevented us from waiving said rights, we grant you a license to use PDCLib, in whole or in part, as you choose, with no restrictions. === Repository Access === * GitHub: [[https://github.com/DevSolar/pdclib | https://github.com/DevSolar/pdclib]] === Branches === From 2012 to 2018, ownership of PDCLib was in the hands of Erin Shepherd. She added significantly to the implemented features, including (but not limited to) wide character and thread support (both incomplete, though). When I got involved into the project again a couple of years later, I quickly came to realize how different her and my ideas for PDCLib were; this included the build system, version control, source structure, and general approach to when to implement what. It felt wrong to deconstruct (parts of) Erin's work just to fit it to my approach to things. So I branched the source at the point where Erin had taken over, and continued my development on that branch. This (my) branch was originally labelled ''retrace'', and is now the ''master'' branch. Erin's work is preserved in the ''shepherd'' branch. Only ''master'' will see future development. There might be occasionally a ''feature'' branch in existence that I use locally to ensure a feature is stable on all platforms I do development on before merging it into ''master''. (I got bitten once too often by something that works on one flavor of Unix-alike but not another, rendering ''master'' not stable across platforms while I try to find a way that works everywhere.) Needless to say, tracking ''feature'' is not encouraged. === Status === PDCLib is still very much a work in progress, and should be considered "alpha" quality. The v1.0 development target is full C99 conformance. == Overview of features implemented == **C99** ^ ^ Status ^ Notes ^ ^ assert.h | :DONE: | | ^ complex.h | :TODO: | | ^ ctype.h | :DONE: | | ^ errno.h | :DONE: | | ^ fenv.h | :INPROGRESS: | | ^ float.h | :DONE: | | ^ inttypes.h | :DONE: | missing ''wcstoimax()'', ''wcstoumax()'' | ^ iso646.h | :DONE: | | ^ limits.h | :DONE: | | ^ locale.h | :INPROGRESS: | only "C" locale supported | ^ math.h | :TODO: | | ^ setjmp.h | :TODO: | | ^ signal.h | :DONE: | dummy | ^ stdarg.h | :DONE: | | ^ stdbool.h | :DONE: | | ^ stddef.h | :DONE: | | ^ stdint.h | :DONE: | | ^ stdio.h | :DONE: | excluding wide character & locale support; float support in progress | ^ stdlib.h | :DONE: | excluding wide character & locale support; float support in progress{*1} | ^ string.h | :DONE: | | ^ tgmath.h | :TODO: | | ^ time.h | :PARTIAL: | Date functions (requiring locale info) not implemented yet | ^ wchar.h | :TODO: | | ^ wctype.h | :TODO: | | {*1}: Missing ''MB_CUR_MAX'', ''atof'', ''strtod'', ''strtof'', ''strtold'', ''mblen'', ''mbtowc'', ''wctomb'', ''mbstowcs'', ''wcstombs''. **C11** ^ ^ Status ^ ^ stdalign.h | :DONE: | ^ stdbool.h | :DONE: | ^ stdnoreturn.h | :DONE: | ^ threads.h | :DONE: | ^ uchar.h | :TODO: | ^ Annex K | :INPROGRESS: | == Versioned Releases == You are strongly encouraged to use the lastest code from the respective branch. The pre-v1.0 tags are internal milestones only, and even the latest (v0.5) is several years behind ''trunk'' / ''master''. === Issues & Feature Requests === You may use the [[https://github.com/DevSolar/pdclib/issues | GitHub issue tracker]] regarding any issues and feature requests. Note that at this point feature requests which do not correspond to the roadmap for the next version of PDCLib are unlikely to be accepted, though patches and submissions likely will as long as they align with project goals. ==== Why? ==== PDCLib is aimed at * Providing a C runtime library for new compilers, * Providing a C runtime library for embedded systems & new OSes * Providing a small, compact, strictly standards conforming C library for established platforms as an alternative to the libraries commonly used It provides a good counterpart to projects like LLVM's libc++ C++ standard library and Pathscale's libcxxrt C++ runtime library. Most C apps, many C++ apps, and both of the above libraries depend heavily upon the C standard library. It is the aim of the PDCLib project to provide the best implementation of that. ==== Who? ==== PDCLib was originally created by Martin "Solar" Baute in 2002. In 2012, after 10 years, he retired from the project, and Erin Shepherd took over. In 2018, Martin Baute took PDCLib back under his wing again. (Thank you to Rink Springer for the motivation -- again. ;-) )