I once designed and implemented most of the pardus package manager called pisi.
However, my “coworkers”, some of which were envious of my prowess, and no bullshit attitude, and who also wanted to hide the fact that they did not contribute anything significant, first removed the author comments in the files, and then removed my svn account, making it look as if I made only a meager contribution.
The fact, however, is that, I’ve implemented almost everything in pisi, except for the implementation of the build commands. All of the architecture, xml processing, database, commands, operations, dependency resolution, other algorithms (like graph algos etc.), CLI, API, and many other details that I forgot are entirely my coding. At any rate, most other coders did not really know how to design algorithms (Ismail definitely knew), or use advanced features like metaclasses, and even if they could they were mostly lazy people when it came to this project. However, they all wanted to take credit for the project, maybe that’s why they are listing authors in alphabetical order nowadays, because they obviously want to conceal my contribution. So, I’m telling you, I’ve written about 80% of the code, perhaps more. In some files I was written as the author. In every file that didn’t list the author, the author was most certainly me. And the remaining 20% was written by Baris, and Caglar, in that order. Baris wrote the build commands. And Caglar implemented actionsapi. That was the extent of their contributions, and Baris also did some bug fixes but I did most of the bug fixes (about 300 bugfixes including several wishlists!). Caglar was pretty hard working, he designed most of the packages. The other “authors” in the current pisi svn version, are more correctly called only contributors. If you’re curious to see the real AUTHORS file it goes something like this:
sirius:pisi malfunct$ cat AUTHORS
Authors and contributors
------------------------
Eray Özkural <eray [at] pardus.org.tr>
Barış Metin
S. Çağlar Onur <caglar [at] pardus.org.tr>
A. Murat Eren
Faik Uygur <faik [at] pardus.org.tr>
Gürer Özen
İsmail Dönmez <ismail [at] pardus.org.tr>
Görkem Çetin
Bahadır Kandemir
Ahmet Aygun <ahmet.aygun [at] pardus.org.tr>
Onur Küçük <onur [at] pardus.org.tr>
Furkan Duman
This was in order of contributions. Murat implemented about one python module, just some file operations and some progress thing. After that, the contributions are negligible, a function or two. Some fixes. Things like that. So only the first four are real authors, and I’ve written most of the code. This was how the pisi 1.0 release was made.
I am saying this, because I know for a fact that some people are taking credit for work they have not done themselves, which should speak for their professional integrity.
UPDATE: Here is also the TODO file, which I believe these plagiarists must have removed from svn to conceal what they have done. Here it is, basically I wrote everything except the build commands and actions API as I said. I thank the co-authors who did real work on that project, and I condemn those who pretend to have contributed to the original code. I resent that people can sink so low as to try to undermine the work of the lead author. There is also an svn graph that shows the commits etc. but I can’t seem to find it, maybe it was in my uludag homepage.
On every line the contributor is not listed, it was me, I used this file to track my progress on the project.
PiSi TODO List
==============
A list of tasks to accomplish, organized into priority sections
Legend:
- Todo
? Not determined if/how we have to do
/ In progress
+ Accomplished
1. Pre-Alpha
+ reading spec file
+ writing
+ files
+ metadata
+ Actions API framework
+ sample api modules (autotools)
+ unit test
+ source building
+ package module
+ extraction
+ add file / compression
+ package creation
+ install database
+ package database
+ command line interface
+ pisi-build
+ pisi-install
+ pisi-index
+ pisi-updatedb
+ single repository index
+ simple dependency checking
+ Package/Files
2. Alpha
+ multi-package dependency analysis (eray)
+ design a package operation planner
+ install/remove operations (eray)
+ command line interface:
+ pisi remove
+ svn-like CLI
+ configuration file
+ define the format of the configuration file
+ extend Config module (config.py) accordingly
+ define configuration keys (baris - meren)
+ query
+ list of installed packages (eray)
+ refactor actionsAPI (caglar)
+ fix xml indentation (meren)
+ define file types (doc, executable, conf, etc...) (baris - meren)
+ write specfile (eray)
+ file locking for database access [not tested!] (eray)
+ implement file uri
+ extend the modules dealing with files accordingly
+ ui module improvements
+ methods for interaction (yes, no questions, etc.)
+ implement source database (eray)
+ easy package preparation
+ convert ebuild to pisi
+ COMAR interface
+ what do we need to specify in a package.
+ package install: register config script
+ package remove: unregister config script
+ internet installation
+ support URI's whereever a filename is supported
+ http server
+ pisi updatedb over internet
3. Beta
+ build cmd: installl build deps
+ improve url support, it's a little dumb at the moment
+ devise a File class that works with URLs
+ add URL support to autoxml
+ info cmd: reverse dependencies of a package
+ a helper script for finding dependencies (eray)
+ autoxml: automated xml processing (eray)
+ design
+ basic types
+ list type
+ class type
+ localtext/text types
+ revised interface
+ improved error handling, check routines, hooks, format/print routines
+ xmlfile support (read/write)
+ string member, in addition to tag/attribute members
+ replace specfile with new specfile using autoxml
+ autoxmlize: metadata, index, dependency and related code paths
+ inheritance support
+ revise writing, error reporting, tests
+ components (eray)
+ requirements
+ xml format, add to PSPEC
+ index component.xml's and make use of them in build
+ a database of components:
+ query components by name
+ query list of packages in a component
+ index: update component database(s)
+ bug fixing
+ install/remove/upgrade components
+ safety switch: preserve system.base, install system.devel for build, etc.
+ info
+ started documentation
+ component dependencies
+ multiple package repository (eray)
+ decide how to implement
+ support repo order
+ refactor xml support and implement multiple backends
+ 4suite support (initial patch by faik, completed by eray)
+ piksemel support (eray)
+ fix autoxml implementation to use 4suite by default
+ partial caching and automatic resume for file download (meren)
+ use a '.part' extension
+ search-file command (eray)
+ exception handling (eray)
+ uniform exception hierarchy
+ proper handling
+ API: we even have application users (eray)
+ a facade module pisi.api (eray)
+ a library init command (eray)
+ high-level package ops, index (eray)
+ info/util commands (eray)
+ build commands (baris)
+ documentation
+ actionsAPI documentation, unittests (caglar - meren)
+ versioning information document (eray - baris)
+ UI
+ PISIMAT
+ pykde GUI (cartman)
+ improve interface (eray)
+ refactor UI, reintroduce base class
+ add an ack interface, start cleaning up a bit
+ cli (eray)
+ ask alternatives to choose from
+ eliminate n's from infos, what's the point?
+ metaclass coolness for CLI command framework (eray)
+ i18n support
+ translations and correct language for summary, description (packagers)
+ make pisi messages translatable (eray)
+ .pot support for dist script (gurer)
+ translate messages mesajların çevirisinin yapılması (pisi tr.po) (eray)
+ proper unicode handling in code - tons of fixes (eray - baris)
+ configure-pending (eray)
+ proper commar connection (baris - gurer)
+ ignore-deps (eray)
+ more robust upgrade (eray)
+ query (eray)
+ comar OM information (Provides)
+ find package by name, display summary/description
+ info --files option (like rpm -ql, but better of course)
+ implement missing unit tests
+ sourcedb
+ package (baris)
+ configuration file (baris)
+ upgrade (eray)
+ upgrade operation
+ test upgrade op
+ system-wide upgrade (upgrade-all) komutu
+ incremental build (eray)
+ generate binary release number by comparing MD5s (eray)
+ keep track of successfully completed configure, make, install
steps (necessary for large-scale builds?) (meren)
+ database locking bugs (eray)
4. Release
* high priority
+ transaction stuff for database (eray)
+ database version file
* low priority
+ search command: (eray)
+ implement an inverted index
+ search in summary and description
5. Post Release
* high priority
- package signing
- a flag to sign package after building
- code to check if the package has a valid signature
- cli improvements
- non interactive mode (similar to --auto in urpmi)
/ high-level build commands
+ an emerge command, just for fun
+ make use of binary repo to satisfy dependencies in emerge
/ build command enhancements:
+ aware of repo sources
? full dependency analysis like install/upgrade etc.
? build-all (or build-distro) command, or as a separate tool
+ make a package and sourcedb for each repo
+ packagedb
+ sourceb
? improve url support: consider adding "other" protocols
- removable media: media://
* medium priority
- UI impl: non-interactive use that selects defaults and logs output
- UI impl: a general purpose Qt UI
/ multi-architecture support
+ design decisions
+ extend XML specs to support that
- cross-platform building support
- incremental build/fetch for repository index (pisi-index.xml)
/ xdelta support (caglar)
- diffsets
- a command (check-repo) to check if repos are consistent wrt dep relations
- component improvements (optional)
- maintain a list of components each component has
- maintain a list of packages
- more support for categories:
- put categories into a database
- fast search for categories
* low priority
/ overhaul installdb (try to merge its use with packagedb) (eray)
/ verify metodlari
+ SpecFile
+ MetaData
+ Files
- Index (somebody should write one :} )
- autoxml:
- revise error checking, printing and tests
- uri type
- date type
- enum type
- make autoxml dependent on only xmlext and xmlfile interfaces
- search command: (eray)
- search components
- english stemming
- turkish stemming
- phonetic/syntactic fault tolerance (whichever works!)
- in particular evaluate soundex and metaphone
- research if there are language independent phonetic encodings
- implement as an option (or make it possible to turn it off if it works well :))
- fault tolerant search in package names (somehow)
If you take a look at the README file which was also written by me of course, all of these features were designed and implemented by me. It was my idea to do everything in python anyway, and I ended up coding up 80-85% of PiSi. I implemented everything that’s non-trivial, that is!
PISI - Packages Installed Succesfully as Intended
PISI is a new package manager for the PARDUS
distribution. In Turkish PISI means "kitty", and
like a kitty, it is featureful and small.
Some of its distinctive features:
- Implemented in python
- Efficient and small
- Package sources are written in XML and python
- Fast database access implemented with berkeley DB
- Integrates low-level and high-level package operations (dependency resolution)
- Framework approach to build applications and tools upon
- Comprehensive CLI and a user-friendly qt GUI (distributed separately)
- Extremely simple package construction
The only thing I got when I started the project was the XML format idea basically and a generic design document that didn’t have any algorithms or any interesting design in it. Surprisingly, after the 1.0 release, the authors of that document we all collaborated on was changed as if it was written by only Baris, which was also plagiarism!
Pay attention to the little details!