PNU, as in PNU is Not Unix, is a challenge project and a learning exercise to reimplement UNIX command-line tools in Python, forming a kind of "pytnix" portable user-land utilities collection.
It's meant to be pronounced "Pneu" (tyre in French), a "pun" which seems appropriate as it's clearly another reinvention of the wheel, longtime after the GNU project :-)
- Originally intended as a learning exercise in Python/Unix for my son, but open to anyone.
- Passing on some Unix culture & lore to a generation of new hackers (in the original and noble meaning of the word).
- Having some handy portable Unix tools, for example for Windows (though there are plenty of other solutions for that).
- Ultimately to have most of the relevant standard utilities included in POSIX.1, many utilities sitting under /bin and /usr/bin in a modern BSD/GNU Linux system, some usual non-standard utilities, as well as some utilities of our own.
- The project is ongoing. You can install what's available from our package with the following console command:
pip install PNU
or you can install PNU plus a selection of additional third-parties tools with this command:
pip install pytnix
- This page is both for the challenge description and for referencing unix tools rewrites made by contributors.
- To contribute you can simply create:
- your own Github repositories and link them to the project by using the pnu-project topic
- your own PyPi packages and link them to the project by using the pnu-project keyword (but please don't use the "pnu-" package prefix for your own entries)
- As a player:
- Decide on a Unix command to reimplement in Python 3.x (see list below for suggestions or our Master / targets list for full details).
- Read the tutorials
- Read the guidelines for contribution (among other documentation manuals)
- Come discuss it with us on the forums
- As an organizer:
The following, (A)D&D inspired, level structure is proposed for gamification. We suggest level bosses in order to complete a level (but no Demogorgon here, we are not in Stranger Things :-)) and associated 🏆 trophies for fun :-)
We're also thinking about offering Habitica's quests for further gamification.
The following classification of commands is still in progress.
Handling return codes, printing to the terminal:
Basic string handling:
- basename, dirname => without options for a start
- caesar, rot13
Basic math or data structures, school level:
- factor, primes => suggested level boss. Trophy: 🎒
Basic filters, command line & environment processing, file operations:
- basename => with full options
- cat => POSIX version only for a start
- head
- expand, unexpand
- fold
- wc => suggested level boss. Trophy: 🚽
Basic text processing utilities, multiple files or many options:
Basic utilities using more complex parsing:
System utilities (implying minimum Unix system knowledge). Regular expressions, text parsing. CSV, JSON, XML, HTML data handling.
Basic system utilities.
Basic system utilities, possibly recursive ones:
Full screen text applications, windowed applications, office documents manipulation, image manipulation, web scraping, network applications, automation.
Interactive full screen applications:
Advanced system utilities, data compression:
Languages (interpreters, compilers), database management systems, network protocols:
- sh => Suggested level boss. Trophy: 🐚
It's a long way to the top if you wanna get your entry in the "Deities & Demigods" of hackers, but here are some examples to inspire you from the Unix & open source pantheon (note: having a beard is not mandatory)
However, all of this is beyond the scope of the project and probably not a good idea to implement in Python :-)
Full operating system kernels & device drivers:
Making your own hardware platform and all the software to run it.