Existing implementations (proprietary and FOSS) suffer from one or both of two key problems:
They are not truly free.
Having added all manner of superfluous cruft, some other implementations have long drifted away from the guiding design principles of UNIX systems. This has resulted in bloated and talkative utilities, and a loss of the user value that having an easily remembered set of clean, simple tools originally provided.
The project homepage
is located on SourceForge.
[13 Sept 2012] Project maintenance taken over by Andy, and moved to a GitHub repository.
Sources for the utilities and their associated man pages will be added to the project as they are released or updated. As the maintainer has less free time to code than he'd like, releases are expected to be slow without assistance. If you support the aims of the project, please consider contributing.
Free (as in Honestly Free)
There's a lot of garbage talked about 'freedom' on the web and, sadly, it's frequently the most vocal who seem to least well understand the concept. So, what is freedom?
Freedom is the absence of coercion and constraint2.
A simple concept that we can all grasp, so why do organisations like the Free Software Foundation insist on qualifying the word with terms such as 'free as in beer' or 'free as in speech'? Maybe it's because they truly don't understand that genuine freedom is non-coercive, or maybe it's to distract you from remembering that yourself?
At heart, a software license — any software license — is a legal assertion of ownership. It exists to formally state that you, the recipient of the software, don't truly own it; rather that the copyright holders do. Those rights holders may then use the license to grant you various concessions in respect of their software, like whether you have permission to access the source code, whether they will permit you to modify it and redistribute the changed code, and so on.
The level of perceived benevolence may vary dramatically between licenses for proprietary software and those widely used within the FOSS community, but any distinctions are purely illusory. To claim that a document, the fundamental purpose of which is to legally restrict your freedom, should be celebrated for guaranteeing 'free' access to source code or 'free' redistribution rights is total sophistry. You might just as well celebrate the 'free' accommodation and 'free' meals that you would receive whilst serving a prison sentence; in both cases, doing so would be overlooking the bigger impact on your true freedom.
In stark contrast to software released under restrictive licenses (and, again, there can be no other kind), code placed into the public domain is irrevocably, permanently and honestly free. By dedicating their work to the public domain, software authors relinquish any claims of ownership over their code, and make it freely available for anyone to use in any manner that they may choose. With no claims on ownership, and no restrictions on use, public domain code is the only software that meets the basic requirement needed to be called truly free — a guaranteed absence of coercion. Authors of public domain code cannot tell you what to do with the software (because, unlike licensed code, it no longer belongs to them), nor can they use the legal process to forcibly coerce you to obey their wishes or demands.
Some disdain the public domain as offering too much freedom. They point out that there is nothing to stop copies of code therein being used in a manner that they don't approve of, or even being placed under license by another party. That's perfectly true — copies of public domain works can be. But the original code always stays truly free, and it would be a funny kind of 'freedom' that stopped people from acting as they wished. For authoritarians everywhere, though, 'free speech' means only that you are able to say what they want you to, not necessarily what you might want to.
The source code of the pdcore utilities is placed into the public domain through the Unlicense. If the code is useful to you, you may do whatever you wish with it. No restrictions, no coercion, and no license compatibility issues.
Just honest and irrevocable freedom.
The UNIX Way
In the context of userland utilities, exhortations such as "write programs that do one thing and do it well", "silence is golden" and "design for simplicity" initially led to a well rounded suite of user utilities that were efficient and productive.
The obvious benefit for the user in having one good tool to do each particular job is that they find it easy to remember which tool is appropriate for any given task. However, and even from the early days of UNIX, as this paper by Pike and Kernighan illustrates, probably well meaning — but definitely ignorant — people began abusing the philosophy that made UNIX what it was, with dire consequences. Sadly, the feature bloat and the resultant user confusion discussed by Pike and Kernighan carried on unabated, and is largely responsible for the commonly held view of those new to UNIX and Linux3 systems that the command line is a frightening and difficult place to be. And they frequently have a point.
Old-time UNIX users remember that things weren't always this way, but the poor souls who have recently come to *nix systems due to the recent growth in the use of Linux and its GNU-infested userland frequently end up thinking that ugly, bloated code and user confusion are simply part and parcel of the *nix experience.
Whilst standards bodies frequently receive well deserved criticism, those responsible for the POSIX specification of the standard UNIX utilities deserve a little more credit. Although still too fat for some tastes, their counsel on system utilities is far closer to the spirit of the UNIX way than is commonly encountered in many modern implementations. You won't find the infamous cat -v in POSIX.1-2008, much less the frankly ridiculous cat -n; rather, the user is recommended to use the nl (number lines) utility if that is the tool that they need.
The pdcore project aims to provide a complete, correct and copyright-free implementation of the POSIX.1-2008 utility set, with no added bells, whistles or go-faster stripes. Whilst the project maintainer would personally have preferred an even sparser set of utilities, code that is never used is useless; consequently, strict adherence to the relatively minimalist standard was considered preferable to encourage adoption.
It is hoped that if you've spent your *nix life fighting with obscure and crufty utility sets, from GNU and others, that pdcore will help to make your command line existence simpler, more pleasant, and a damn-sight more productive — as that really is the UNIX way.
The project aims to implement all of the non development-oriented POSIX.1-2008 shell and utilities, moving on for full coverage if possible. This is obviously a fairly large undertaking, and any assistance would be very welcome.
If you want to submit code, it would be appreciated if you could work to the coding conventions used in the released source. However, the maintainer is willing to refactor/rewrite submissions, so that a coherent and consistent codebase is maintained.
As code will be placed into the public domain, all submissions must be accompanied by an email — preferably digitally signed — from their author including the following text:
I dedicate any and all copyright interest in this software to the public domain. I make this dedication for the benefit of the public at large and to the detriment of my heirs and successors. I intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.
To the best of my knowledge and belief, my contributions are either originally authored by me or are derived from prior works which I have verified are also in the public domain and are not subject to claims of copyright by other parties.
To the best of my knowledge and belief, no individual, business, organization, government, or other entity has any copyright interest in my contributions, and I affirm that I will not make contributions that are otherwise encumbered.
Please also let me know what name and email address (if any) to include in the AUTHORS file in order to give credit for submitted work. Thanks!
Online at SourceForge,
or via email to patrick <firstname.lastname@example.org>.
[13 Sept 2012] See new maintainer's GitHub repository.
For obvious reasons, feature requests — over and above those mandated by POSIX.1-2008 — will be routed to /dev/null.