I've taken a few minutes to jot down some ramblings concerning a Pike module repository. I know that there was a proposal a while back called PUMA, though I can't find any trace of it when I went to look for it. I'm sure that it has some very good ideas that I will have neglected to include here. If that's the case, or if you have any thoughts, please feel free to send them my way.
* Initial tasks that need to be accomplished
1. The build/install system should be updated for the various varieties of modules:
Modules with C component (ok) Modules with C and one Pike (ok, but see the problem below) Modules with C and multiple Pike Modules with Pike (see the problem below) Modules with multiple Pike
2. Skeleton modules should be prepared for the various varieties of modules.
3. The documentation build tools should be modified to allow partial merging of new documentation. The extracted documentation should be installed to facilitate the documentation process.
4. A local install option should be added so that a user may install a module in their local module tree.
5. A method for passing arguments to the configure process should be developed.
* A Practical Problem
When someone is granted a spot in the namespace, what are they getting? do they get the whole subtree below where they've been granted?
Example: if I get Protocols.NNTP, for the purposes of making a client, can anyone else get their module in that tree or do they have to look somewhere else? I worry that we'd end up with essentially a 2 level module tree.
Also, this problem manifests itself in the handling of the installed modules and how to make room for others. If a module is installed like this (example Protocols.NNTP):
lib/modules/Protocols.pmod/NNTP.pmod (single pike file)
how do we handle someone wanting to create Protocols.NNTP.Server?
would it be better to have all modules installed as module.pmod within ModName.pmod direcories? This would give the maximum amount of flexibility as far as making room for other modules to be slid in, but really seems inefficient, in that we'd most likely only have one module file per directory.
* Namespace Management
Coordination of the namespace will be handled by a namespace management board ("the Board"). The board should be made up of not less than 3 developers. The board should reflect the makeup of the Pike user community, with representatives from the IDA team, core developers and non-core developers.
Q: Should there be requirements for membership and/or rotating positions?
The Board is responsible for the smooth operation of the repository, and for keeping the namespace manageable. The Board is the final authority for handling namespace issues that may arise among developers. When practical, the Board should attempt to obtain consensus among its members when making decisions.
The Board may delegate responsibility for a given branch of the module naming tree to a non-Board member, though the Board will always retain the right to assert control over delegated branches.
Coordinators of delegated branches must remain active in thier role. If such a developer is no longer able to perform the duties of a branch coordinator, they must return control of the branch to the Board. All coordinators should be contacted on a regular basis (several times per year) to verify that they are accessible and able to carry out these duties.
* Duties of coordinators might include:
a) granting positions in the tree to other module developers b) assisting module developers in making wise decisions concerning module and class naming c) making sure that modules in their respective section of the repository comply with the requirements for inclusion (quality control)
* Adding modules to the repository
Before a module can be contributed to the repository, the module's author must request a place for that module within the module namespace. The request should include at least the following:
a) Developer Name b) Contact Information (at least email, but potentially other means) c) Proposed module location in the namespace d) Estimated scope of namespace usage (subclasses and possibility of other modules beneath) e) Request for coordination (if the tree is not already delegated)
Ideally, the process for making requests and having the requests approved would be streamlined and part of a semi-automated workflow.
* Requirements for modules in the repository
All modules must meet the following requirements (quality control):
a) Author name and contact information must be provided b) License must be clearly declared c) Version of the module must be included as a constant in the module d) API Documentation (should be provided), and must be in autodoc format e) Modules must use the standardized build and installation interfaces f) Modules must not cause interference with other modules in the tree
A directory of information about modules in the repository will be maintained by the Board. This directory should contain information about modules, their function, changes and versions, compatibility and dependency information. A distributed network of nodes will make the directory and the modules themselves available for access by users. The directory will also be used to provide a web service that will allow a user to locate, download and install modules automatically.
Well, that's about all I have for now. Please give me your thoughts, flames and other assorted musings.
Bill
In writing PUMA was never more than (dated 21 nov 2001):
Pike Universal Module Archive
1. Goal
The goal of the PUMA project is to create a system for near to completely automatical storage, download, installation and management of 3rd party Pike modules. Both pure pike modules as well as C modules should be handled by the system. It should be possible to add more modules to the system without any contact with Roxen servers or any other Pike module provider. The system should ensure a fairly good authenticity over the origins of Pike modules.
2. Project Name Issues
Currently the PUMA project is called PUMA (erhm), but the real name should be
1. Pronouncable 2. Free for domain registration (preferably .org). 3. Free for use as a top module in Pike.
Possible name permutations might include
Pike Universal Module Archive Open Plugin Library Global Extension Decentralized Secure
(Pike Universal Decentralized Extension Library, anyone?)
3. Module hierarchy
To ensure that there are no name clashes, all PUMA modules are stored in a (directory) tree under PUMA.pmod. Roxens only involvment is administration the PUMA top level, e.g. handing out identifiers directly below PUMA, e.g. PUMA.PExt. Everything below PUMA.PExt is then handled by whoever got responsibility for PUMA.PExt. A corresponding direcotry structure _PUMA.pmod exists for C modules.
4. Security
Every module in the module hierarchy has got its own authentification key. When a new module is installed, e.g. PUMA.CPAN then the signature of the CPAN package is verified against the PUMA authentification key. When the package PUMA.PExt.PDF is installed the PDF package is verified with the PUMA.PExt key. If that verification failed, the package is verified against the PUMA key.
Note that no authentification is made after the a module has been installed, so unsigned packages may be installed manually.
A file signature is a MD5 checksum encrypted with a private RSA key. A module key is a the public RSA key that can decrypt the MD5 checksum. The module key is stored encrypted with any of the private keys of the parent module. The top module, PUMA, has only its unencrypted public keys.
5. Finding packages
Every module may provide a URL where its modules are located. If no URL is provided, the parents URL is assumed. E.g. if the module PUMA.PExt is to be installed, the installation program queries PUMA for the location of its modules and gets a URL in return. The installation program downloads the package (hopefully) found at URL+"PExt" and installs it. Note that the PUMA administrator (Roxen) might send a HTTP referrer to another server.
A URL may use the protocols HTTP and HTTPS. A server may request a user/password response.
Requesting only URL will return a list of all available modules in a human readable list.
5.1. Multilevel download
Let's say that our Pike installation has no PUMA.PExt module and we want to install PUMA.PExt.PCRE. First the installer will download and install PUMA.PExt as described in section 5, and then it will check if PUMA.PExt.PCRE exists. If not, it will repeat the download, but quering PUMA.PExt for URL root and requesting URL+"PCRE".
5.2. Refresh module tree
It should be possible to refresh the module tree, e.g. starting from the PUMA module and search for all modules as if Pike had no prior knowledge of where to find them. This will update all moved URLs that might otherwise cause Pike to fail to install a requested module. If a package download fails, a refresh operations should be executed, at least on the failing branch.
5.3. Repair/Update module tree
It should also be possible to make a more extensive tree refresh, where all modules are downloaded and installed. This will repair/revert all modified files and bring the module tree up the latest versions. There is no real need to add any version system to the actual PUMA system. Installing CVS directories with the aproriate anon-CVS-root ought to be enough.
6. Package format.
The package could be a tar.gz-file. It contains, apart from the actual files needed, a signature file, an information file and a Makefile file. The signature file obviously includes the signatures of all files in the package, the information file includes some formalized information about the package as well as the modules URL root.
/ Martin Nilsson (saturator)
Previous text:
2003-10-16 05:05: Subject: module repository ramblings
I've taken a few minutes to jot down some ramblings concerning a Pike module repository. I know that there was a proposal a while back called PUMA, though I can't find any trace of it when I went to look for it. I'm sure that it has some very good ideas that I will have neglected to include here. If that's the case, or if you have any thoughts, please feel free to send them my way.
- Initial tasks that need to be accomplished
- The build/install system should be updated for the various varieties of
modules:
Modules with C component (ok) Modules with C and one Pike (ok, but see the problem below) Modules with C and multiple Pike Modules with Pike (see the problem below) Modules with multiple Pike
- Skeleton modules should be prepared for the various varieties of
modules.
- The documentation build tools should be modified to allow partial
merging of new documentation. The extracted documentation should be installed to facilitate the documentation process.
- A local install option should be added so that a user may install a
module in their local module tree.
- A method for passing arguments to the configure process should be
developed.
- A Practical Problem
When someone is granted a spot in the namespace, what are they getting? do they get the whole subtree below where they've been granted?
Example: if I get Protocols.NNTP, for the purposes of making a client, can anyone else get their module in that tree or do they have to look somewhere else? I worry that we'd end up with essentially a 2 level module tree.
Also, this problem manifests itself in the handling of the installed modules and how to make room for others. If a module is installed like this (example Protocols.NNTP):
lib/modules/Protocols.pmod/NNTP.pmod (single pike file)
how do we handle someone wanting to create Protocols.NNTP.Server?
would it be better to have all modules installed as module.pmod within ModName.pmod direcories? This would give the maximum amount of flexibility as far as making room for other modules to be slid in, but really seems inefficient, in that we'd most likely only have one module file per directory.
- Namespace Management
Coordination of the namespace will be handled by a namespace management board ("the Board"). The board should be made up of not less than 3 developers. The board should reflect the makeup of the Pike user community, with representatives from the IDA team, core developers and non-core developers.
Q: Should there be requirements for membership and/or rotating positions?
The Board is responsible for the smooth operation of the repository, and for keeping the namespace manageable. The Board is the final authority for handling namespace issues that may arise among developers. When practical, the Board should attempt to obtain consensus among its members when making decisions.
The Board may delegate responsibility for a given branch of the module naming tree to a non-Board member, though the Board will always retain the right to assert control over delegated branches.
Coordinators of delegated branches must remain active in thier role. If such a developer is no longer able to perform the duties of a branch coordinator, they must return control of the branch to the Board. All coordinators should be contacted on a regular basis (several times per year) to verify that they are accessible and able to carry out these duties.
- Duties of coordinators might include:
a) granting positions in the tree to other module developers b) assisting module developers in making wise decisions concerning module and class naming c) making sure that modules in their respective section of the repository comply with the requirements for inclusion (quality control)
- Adding modules to the repository
Before a module can be contributed to the repository, the module's author must request a place for that module within the module namespace. The request should include at least the following:
a) Developer Name b) Contact Information (at least email, but potentially other means) c) Proposed module location in the namespace d) Estimated scope of namespace usage (subclasses and possibility of other modules beneath) e) Request for coordination (if the tree is not already delegated)
Ideally, the process for making requests and having the requests approved would be streamlined and part of a semi-automated workflow.
- Requirements for modules in the repository
All modules must meet the following requirements (quality control):
a) Author name and contact information must be provided b) License must be clearly declared c) Version of the module must be included as a constant in the module d) API Documentation (should be provided), and must be in autodoc format e) Modules must use the standardized build and installation interfaces f) Modules must not cause interference with other modules in the tree
A directory of information about modules in the repository will be maintained by the Board. This directory should contain information about modules, their function, changes and versions, compatibility and dependency information. A distributed network of nodes will make the directory and the modules themselves available for access by users. The directory will also be used to provide a web service that will allow a user to locate, download and install modules automatically.
Well, that's about all I have for now. Please give me your thoughts, flames and other assorted musings.
Bill
/ Brevbäraren
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
/ Fredrik (Naranek) Hubinette (Real Build Master)
Previous text:
2003-10-16 05:22: Subject: module repository ramblings
In writing PUMA was never more than (dated 21 nov 2001):
Pike Universal Module Archive
- Goal
The goal of the PUMA project is to create a system for near to completely automatical storage, download, installation and management of 3rd party Pike modules. Both pure pike modules as well as C modules should be handled by the system. It should be possible to add more modules to the system without any contact with Roxen servers or any other Pike module provider. The system should ensure a fairly good authenticity over the origins of Pike modules.
- Project Name Issues
Currently the PUMA project is called PUMA (erhm), but the real name should be
- Pronouncable
- Free for domain registration (preferably .org).
- Free for use as a top module in Pike.
Possible name permutations might include
Pike Universal Module Archive Open Plugin Library Global Extension Decentralized Secure
(Pike Universal Decentralized Extension Library, anyone?)
- Module hierarchy
To ensure that there are no name clashes, all PUMA modules are stored in a (directory) tree under PUMA.pmod. Roxens only involvment is administration the PUMA top level, e.g. handing out identifiers directly below PUMA, e.g. PUMA.PExt. Everything below PUMA.PExt is then handled by whoever got responsibility for PUMA.PExt. A corresponding direcotry structure _PUMA.pmod exists for C modules.
- Security
Every module in the module hierarchy has got its own authentification key. When a new module is installed, e.g. PUMA.CPAN then the signature of the CPAN package is verified against the PUMA authentification key. When the package PUMA.PExt.PDF is installed the PDF package is verified with the PUMA.PExt key. If that verification failed, the package is verified against the PUMA key.
Note that no authentification is made after the a module has been installed, so unsigned packages may be installed manually.
A file signature is a MD5 checksum encrypted with a private RSA key. A module key is a the public RSA key that can decrypt the MD5 checksum. The module key is stored encrypted with any of the private keys of the parent module. The top module, PUMA, has only its unencrypted public keys.
- Finding packages
Every module may provide a URL where its modules are located. If no URL is provided, the parents URL is assumed. E.g. if the module PUMA.PExt is to be installed, the installation program queries PUMA for the location of its modules and gets a URL in return. The installation program downloads the package (hopefully) found at URL+"PExt" and installs it. Note that the PUMA administrator (Roxen) might send a HTTP referrer to another server.
A URL may use the protocols HTTP and HTTPS. A server may request a user/password response.
Requesting only URL will return a list of all available modules in a human readable list.
5.1. Multilevel download
Let's say that our Pike installation has no PUMA.PExt module and we want to install PUMA.PExt.PCRE. First the installer will download and install PUMA.PExt as described in section 5, and then it will check if PUMA.PExt.PCRE exists. If not, it will repeat the download, but quering PUMA.PExt for URL root and requesting URL+"PCRE".
5.2. Refresh module tree
It should be possible to refresh the module tree, e.g. starting from the PUMA module and search for all modules as if Pike had no prior knowledge of where to find them. This will update all moved URLs that might otherwise cause Pike to fail to install a requested module. If a package download fails, a refresh operations should be executed, at least on the failing branch.
5.3. Repair/Update module tree
It should also be possible to make a more extensive tree refresh, where all modules are downloaded and installed. This will repair/revert all modified files and bring the module tree up the latest versions. There is no real need to add any version system to the actual PUMA system. Installing CVS directories with the aproriate anon-CVS-root ought to be enough.
- Package format.
The package could be a tar.gz-file. It contains, apart from the actual files needed, a signature file, an information file and a Makefile file. The signature file obviously includes the signatures of all files in the package, the information file includes some formalized information about the package as well as the modules URL root.
/ Martin Nilsson (saturator)
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
More wacky ideas...
Pike Internal Global Extension and Option Network - Pigeon (A rat with wings) GLobal Internal Modular Pike System Extension - Glimpse (A Synonym for Pike) Trustworthy Universal Respository Network - Turnpike Pike Repository Internal Security Module - Prism Universal Networked Decentralised Extension Repository Point And Network Transparent Service - Underpants
But why not just make up something arbitrary like, uhm, I dont know...
MyBMX FredsGonads ProfessorChronotis
Actually I like "SWIM", for Secure Web Installation Module - Pike's gotta swim or it's gills don't work. :)
--- James Tyson Director, Giant Robot Ltd http://www.giantrobot.co.nz/
Figure out a meaning for WET... :-) (Or HALBERD.)
/ Mirar
Previous text:
2003-10-16 10:48: Subject: Re: module repository ramblings
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
More wacky ideas...
Pike Internal Global Extension and Option Network - Pigeon (A rat with wings) GLobal Internal Modular Pike System Extension - Glimpse (A Synonym for Pike) Trustworthy Universal Respository Network - Turnpike Pike Repository Internal Security Module - Prism Universal Networked Decentralised Extension Repository Point And Network Transparent Service - Underpants
But why not just make up something arbitrary like, uhm, I dont know...
MyBMX FredsGonads ProfessorChronotis
Actually I like "SWIM", for Secure Web Installation Module - Pike's gotta swim or it's gills don't work. :)
James Tyson Director, Giant Robot Ltd http://www.giantrobot.co.nz/
/ Brevbäraren
Pike Architechture Library Pike Advanced Secure Solution Pike Electric Runnable Kettle Pile of Interesting and Likable Electrons
/ Peter Bortas
Previous text:
2003-10-16 06:41: Subject: module repository ramblings
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
/ Fredrik (Naranek) Hubinette (Real Build Master)
A pike has littel white spots - right?
SPOTS - Secure Pike mOdule Solution ^. ` To satisfy the 'l347 sp0ken' community ;-)
/ Peter Lundqvist (disjunkt)
Previous text:
2003-10-16 10:53: Subject: module repository ramblings
Pike Architechture Library Pike Advanced Secure Solution Pike Electric Runnable Kettle Pile of Interesting and Likable Electrons
/ Peter Bortas
How about in the spirit of sealife:
Pike Repository And Worldwide Network - PRAWN
:)
On Thu, 16 Oct 2003, Fredrik (Naranek) Hubinette (Real Build Master) @ Pike (-) developers forum wrote:
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
/ Fredrik (Naranek) Hubinette (Real Build Master)
Then the people associated with Pike would probably get even more spam about the "fruits of the sea". :-)
I guess that's the reason spammers seems to have concluded that I really want to buy a few metric tonnes of fish every day, at least.
/ Per Hedbor ()
Previous text:
2003-10-16 16:10: Subject: Re: module repository ramblings
How about in the spirit of sealife:
Pike Repository And Worldwide Network - PRAWN
:)
On Thu, 16 Oct 2003, Fredrik (Naranek) Hubinette (Real Build Master) @ Pike (-) developers forum wrote:
Pike Extention Archive - PEA Pike Open Resource Keeper - PORK Pike Universal Resource Repository - PURR Pike Universal Plugin Archive - PUPA :)
/ Fredrik (Naranek) Hubinette (Real Build Master)
/ Brevbäraren
I have no clue what most of my spammers want. I get about 50-100 chinese/korean/whatever spams a day.
/ Martin Nilsson (saturator)
Previous text:
2003-10-16 16:22: Subject: Re: module repository ramblings
Then the people associated with Pike would probably get even more spam about the "fruits of the sea". :-)
I guess that's the reason spammers seems to have concluded that I really want to buy a few metric tonnes of fish every day, at least.
/ Per Hedbor ()
On Wed, Oct 15, 2003 at 11:04:09PM -0400, Bill Welliver wrote:
Also, this problem manifests itself in the handling of the installed modules and how to make room for others. If a module is installed like this (example Protocols.NNTP):
lib/modules/Protocols.pmod/NNTP.pmod (single pike file)
how do we handle someone wanting to create Protocols.NNTP.Server?
this got me wondering it it is possible (and does it make sense) to seperate the class hierarchy from the directory structure?
looking at CPAN you can access the modules not only by class but also by author (and maybe other criteria)
of course for the webinterface this can be solved by links, but from a cvs perspective having a directory by author may make more sense.
combining these should be no harder than simply having multiple directories with classes in them, so that the pike user only sees one class tree. it only gets interresting if the same class is in multiple trees.
considering the issue of conflicting implementations of the same class, these would be no problem then, because if both classes are installed, one will be chosen automaticly, or i remove one and the other will be used without needing to change the code.
this also allows selecting the classes by author and license. (it may not be wise to mix stuff with different licenses)
on the other hand having a shared tree promotes shared authorship, but this is just the situation we have now, because with shared authorship we need to agree on the license, which brings all the trouble that is keeping some people from contributing now.
greetings, martin.
In CPAN you can browse the available modules by author. Once you install them, they still get installed in the same place. On the download site, it's basically the equivalaent of a bunch of symlinks.
As far as CVS goes, you're not going to have a great big tree, because that's not how the modules get built. They [the modules] also probably wouldn't be housed in a single CVS repository anyhow. Each module developer gets to develop the module how they want. The repository is just for making modules available (search, download and build).
Am I heading in the wrong direction with this line of thinking?
Bill
On Thu, 16 Oct 2003, Martin Baehr wrote:
this got me wondering it it is possible (and does it make sense) to seperate the class hierarchy from the directory structure?
looking at CPAN you can access the modules not only by class but also by author (and maybe other criteria)
of course for the webinterface this can be solved by links, but from a cvs perspective having a directory by author may make more sense.
combining these should be no harder than simply having multiple directories with classes in them, so that the pike user only sees one class tree. it only gets interresting if the same class is in multiple trees.
considering the issue of conflicting implementations of the same class, these would be no problem then, because if both classes are installed, one will be chosen automaticly, or i remove one and the other will be used without needing to change the code.
this also allows selecting the classes by author and license. (it may not be wise to mix stuff with different licenses)
on the other hand having a shared tree promotes shared authorship, but this is just the situation we have now, because with shared authorship we need to agree on the license, which brings all the trouble that is keeping some people from contributing now.
greetings, martin.
I'd say you are right on target. Some people will definitely prefer other means of version management, and doing it this way gets rid of all the central maintenance work of accounts and similar too.
/ Johan Sundström, Lysator
Previous text:
2003-10-16 20:22: Subject: Re: module repository ramblings
In CPAN you can browse the available modules by author. Once you install them, they still get installed in the same place. On the download site, it's basically the equivalaent of a bunch of symlinks.
As far as CVS goes, you're not going to have a great big tree, because that's not how the modules get built. They [the modules] also probably wouldn't be housed in a single CVS repository anyhow. Each module developer gets to develop the module how they want. The repository is just for making modules available (search, download and build).
Am I heading in the wrong direction with this line of thinking?
Bill
On Thu, 16 Oct 2003, Martin Baehr wrote:
this got me wondering it it is possible (and does it make sense) to seperate the class hierarchy from the directory structure?
looking at CPAN you can access the modules not only by class but also by author (and maybe other criteria)
of course for the webinterface this can be solved by links, but from a cvs perspective having a directory by author may make more sense.
combining these should be no harder than simply having multiple directories with classes in them, so that the pike user only sees one class tree. it only gets interresting if the same class is in multiple trees.
considering the issue of conflicting implementations of the same class, these would be no problem then, because if both classes are installed, one will be chosen automaticly, or i remove one and the other will be used without needing to change the code.
this also allows selecting the classes by author and license. (it may not be wise to mix stuff with different licenses)
on the other hand having a shared tree promotes shared authorship, but this is just the situation we have now, because with shared authorship we need to agree on the license, which brings all the trouble that is keeping some people from contributing now.
greetings, martin.
/ Brevbäraren
I imagine that there would be a "site" where users would register their modules, and that they would have an account that all of their modules were available under. However, that's really a different sort of thing, and one that wouldn't necessarily require lots of effort. I've been doing something similar with RMS for years. Admittedly, there's not a lot of activity there, but the acutal administrative overhead is pretty low.
I see the repository as an information and distribution for code that is developed according to the published module/build APIs. I think it represents a good balance of freedom for the users and quality for the pike community as a whole.
Bill
On Thu, 16 Oct 2003, Johan Sundstr�m, Lysator @ Pike developers forum wrote:
I'd say you are right on target. Some people will definitely prefer other means of version management, and doing it this way gets rid of all the central maintenance work of accounts and similar too.
/ Johan Sundstr�m, Lysator
Previous text:
2003-10-16 20:22: Subject: Re: module repository ramblings
In CPAN you can browse the available modules by author. Once you install them, they still get installed in the same place. On the download site, it's basically the equivalaent of a bunch of symlinks.
As far as CVS goes, you're not going to have a great big tree, because that's not how the modules get built. They [the modules] also probably wouldn't be housed in a single CVS repository anyhow. Each module developer gets to develop the module how they want. The repository is just for making modules available (search, download and build).
Am I heading in the wrong direction with this line of thinking?
Bill
On Thu, 16 Oct 2003, Martin Baehr wrote:
this got me wondering it it is possible (and does it make sense) to seperate the class hierarchy from the directory structure?
looking at CPAN you can access the modules not only by class but also by author (and maybe other criteria)
of course for the webinterface this can be solved by links, but from a cvs perspective having a directory by author may make more sense.
combining these should be no harder than simply having multiple directories with classes in them, so that the pike user only sees one class tree. it only gets interresting if the same class is in multiple trees.
considering the issue of conflicting implementations of the same class, these would be no problem then, because if both classes are installed, one will be chosen automaticly, or i remove one and the other will be used without needing to change the code.
this also allows selecting the classes by author and license. (it may not be wise to mix stuff with different licenses)
on the other hand having a shared tree promotes shared authorship, but this is just the situation we have now, because with shared authorship we need to agree on the license, which brings all the trouble that is keeping some people from contributing now.
greetings, martin.
/ Brevb�raren
- A Practical Problem
When someone is granted a spot in the namespace, what are they getting? do they get the whole subtree below where they've been granted?
It makes most sense to me that subtrees should be handed out.
Example: if I get Protocols.NNTP, for the purposes of making a client, can anyone else get their module in that tree or do they have to look somewhere else?
Typically you have already made a NNTP client implementation in a less prominent part of the tree (PUMA.Protocols.NNTP, Author.nilsson.NNTP, PExt.NNTP or whatever) and the Protocols admin wants elevate your NNTP implementation to the official one. Perhaps.
Also, this problem manifests itself in the handling of the installed modules and how to make room for others.
That's just a minor technical detail. The install_module script (in the Pike bin directory) does
if [ -f "$DIR" ]; then mv "$DIR" "$DIR-foo" mkdir $DIR mv "$DIR-foo" "$DIR/module.pmod" break fi
- Namespace Management
There is no need to overspecify this at this moment I think. We can create a top module where everyones modules may live unrestricted and then think of means for how to merge them into the main tree.
/ Martin Nilsson (saturator)
Previous text:
2003-10-16 05:05: Subject: module repository ramblings
I've taken a few minutes to jot down some ramblings concerning a Pike module repository. I know that there was a proposal a while back called PUMA, though I can't find any trace of it when I went to look for it. I'm sure that it has some very good ideas that I will have neglected to include here. If that's the case, or if you have any thoughts, please feel free to send them my way.
- Initial tasks that need to be accomplished
- The build/install system should be updated for the various varieties of
modules:
Modules with C component (ok) Modules with C and one Pike (ok, but see the problem below) Modules with C and multiple Pike Modules with Pike (see the problem below) Modules with multiple Pike
- Skeleton modules should be prepared for the various varieties of
modules.
- The documentation build tools should be modified to allow partial
merging of new documentation. The extracted documentation should be installed to facilitate the documentation process.
- A local install option should be added so that a user may install a
module in their local module tree.
- A method for passing arguments to the configure process should be
developed.
- A Practical Problem
When someone is granted a spot in the namespace, what are they getting? do they get the whole subtree below where they've been granted?
Example: if I get Protocols.NNTP, for the purposes of making a client, can anyone else get their module in that tree or do they have to look somewhere else? I worry that we'd end up with essentially a 2 level module tree.
Also, this problem manifests itself in the handling of the installed modules and how to make room for others. If a module is installed like this (example Protocols.NNTP):
lib/modules/Protocols.pmod/NNTP.pmod (single pike file)
how do we handle someone wanting to create Protocols.NNTP.Server?
would it be better to have all modules installed as module.pmod within ModName.pmod direcories? This would give the maximum amount of flexibility as far as making room for other modules to be slid in, but really seems inefficient, in that we'd most likely only have one module file per directory.
- Namespace Management
Coordination of the namespace will be handled by a namespace management board ("the Board"). The board should be made up of not less than 3 developers. The board should reflect the makeup of the Pike user community, with representatives from the IDA team, core developers and non-core developers.
Q: Should there be requirements for membership and/or rotating positions?
The Board is responsible for the smooth operation of the repository, and for keeping the namespace manageable. The Board is the final authority for handling namespace issues that may arise among developers. When practical, the Board should attempt to obtain consensus among its members when making decisions.
The Board may delegate responsibility for a given branch of the module naming tree to a non-Board member, though the Board will always retain the right to assert control over delegated branches.
Coordinators of delegated branches must remain active in thier role. If such a developer is no longer able to perform the duties of a branch coordinator, they must return control of the branch to the Board. All coordinators should be contacted on a regular basis (several times per year) to verify that they are accessible and able to carry out these duties.
- Duties of coordinators might include:
a) granting positions in the tree to other module developers b) assisting module developers in making wise decisions concerning module and class naming c) making sure that modules in their respective section of the repository comply with the requirements for inclusion (quality control)
- Adding modules to the repository
Before a module can be contributed to the repository, the module's author must request a place for that module within the module namespace. The request should include at least the following:
a) Developer Name b) Contact Information (at least email, but potentially other means) c) Proposed module location in the namespace d) Estimated scope of namespace usage (subclasses and possibility of other modules beneath) e) Request for coordination (if the tree is not already delegated)
Ideally, the process for making requests and having the requests approved would be streamlined and part of a semi-automated workflow.
- Requirements for modules in the repository
All modules must meet the following requirements (quality control):
a) Author name and contact information must be provided b) License must be clearly declared c) Version of the module must be included as a constant in the module d) API Documentation (should be provided), and must be in autodoc format e) Modules must use the standardized build and installation interfaces f) Modules must not cause interference with other modules in the tree
A directory of information about modules in the repository will be maintained by the Board. This directory should contain information about modules, their function, changes and versions, compatibility and dependency information. A distributed network of nodes will make the directory and the modules themselves available for access by users. The directory will also be used to provide a web service that will allow a user to locate, download and install modules automatically.
Well, that's about all I have for now. Please give me your thoughts, flames and other assorted musings.
Bill
/ Brevbäraren
pike-devel@lists.lysator.liu.se