| 1 | = Background = |
| 2 | |
| 3 | Chats and email threads: |
| 4 | |
| 5 | * Email: http://lists.parrot.org/pipermail/parrot-dev/2009-July/002637.html |
| 6 | * IRC: http://irclog.perlgeek.de/perl6/2009-07-31#i_1358894 |
| 7 | * IRC: http://irclog.perlgeek.de/perl6/2009-07-31#i_1359027 |
| 8 | * Email: http://lists.parrot.org/pipermail/parrot-dev/2009-July/002666.html |
| 9 | * IRC: http://irclog.perlgeek.de/parrot/2009-08-07#i_1375425 |
| 10 | * Email: http://lists.parrot.org/pipermail/parrot-dev/2009-August/002695.html |
| 11 | * IRC: http://irclog.perlgeek.de/parrot/2009-08-11#i_1385294 |
| 12 | |
| 13 | = Requirements = |
| 14 | |
| 15 | * General |
| 16 | * Distributions should be dead easy for module authors to create, |
| 17 | and for users to install. |
| 18 | * We can create a centralized metadata store, but do not want to |
| 19 | build and manage a module distribution network ... |
| 20 | * However it should be possible for another group to do so. |
| 21 | * Toolchain |
| 22 | * Basic tools can assume Parrot and the core modules are working, |
| 23 | but require no other dependencies internally. |
| 24 | * All external tools needed to download/build/install modules will |
| 25 | be specified in the module metadata. |
| 26 | * Tools should be easy to configure. |
| 27 | * Tools should attempt to auto-configure as much as possible. |
| 28 | * Tools must properly handle the difference between user-local, |
| 29 | site-local, and vendor-installed modules. |
| 30 | * Metadata |
| 31 | * Simple, extensible format. |
| 32 | * Unicode and case-retaining. |
| 33 | * Must include its own spec version. |
| 34 | * Sufficient for automated programs to create system packages |
| 35 | (DEB, RPM, etc.). |
| 36 | * Separate static v. configure-discovered v. hand-edited metadata. |
| 37 | Separate files? |
| 38 | * Includes fetch, configure, build, test, install, and runtime |
| 39 | dependencies. |
| 40 | * Should be able to track author, mailing list, bug email/bug URI, |
| 41 | wiki, homepage, source repository, etc. |
| 42 | * Allows disambiguation as per Perl 6 module spec (authorities, |
| 43 | versions, authors, etc.). |
| 44 | * Specifies rules for dependency string parsing/interpretation. |
| 45 | |
| 46 | |
| 47 | = Proposal = |
| 48 | |
| 49 | ''''' This is a rough draft! Suggestions welcome! ''''' |
| 50 | |
| 51 | * Overview |
| 52 | * Parrot community builds a module metadata search system. |
| 53 | * This search system gathers metadata from various sources, and |
| 54 | allows users to query it via web browser or API, but does not |
| 55 | itself store the actual modules. |
| 56 | * Once found, modules can be fetched from many possible sources, |
| 57 | including VCS repositories, FTP mirrors, etc. |
| 58 | * Parrot team will need to standardize module metadata, provide |
| 59 | the libraries and tools necessary to use the search system, |
| 60 | provide guidelines for extending the toolchain, and mentor the |
| 61 | growth of the ecosystem until it stands on its own. |
| 62 | * Metadata format |
| 63 | * Served metadata container is gzip'ed tarball (.tar.gz? .tgz?). |
| 64 | * Core metadata is in META.json at top level of container. |
| 65 | * Container includes copies of special files (e.g. README). |
| 66 | * Format for specifying non-metadata-only build scripts undecided. |
| 67 | * Integrity check / authentication methods undecided. |
| 68 | * Probably at least md5sum and sha1sum for source tarballs, |
| 69 | but what about when pulling from raw VCS repo? |
| 70 | * Core modules |
| 71 | * parrot config (already exists -- config.pir) |
| 72 | * HTTP client (at least GET, with redirect and proxy support) |
| 73 | * zlib (at least decompress) |
| 74 | * tar (at least extract) |
| 75 | * JSON (at least parse) |
| 76 | * version spec (at least parse and compare) |
| 77 | * library probe (shared library info: present? version? location?) |
| 78 | * file paths (portability: File::Spec + File::Basename + ...) |
| 79 | * file install (portability: copy file, set file perms, etc.) |
| 80 | * query metadata (perform API calls to metadata/search server) |
| 81 | * installer lib (all the real brains/glue for the module repo client) |
| 82 | * installer ui (CLI and/or Readline, minimal brains, uses lib) |
| 83 | * Basic Batteries modules |
| 84 | * Full versions of any modules that are limited in Core |
| 85 | * Installer add-ons: VCS fetch/use system pkgs/full depresolve/etc. |
| 86 | * Module author tools: create/register/update/upload/etc. |
| 87 | * PIR-level tools: disassembler/debugger/profiler/data dumper |
| 88 | * NCI tools: parse header/manage typemap/wrap C struct/etc. |
| 89 | * Standard interfaces: TAP, DBDI, logging, ? |
| 90 | * Standard libraries: OpenSSL, DateTime, temp dir/file, ? |
| 91 | |
| 92 | * Possible Power Packs (NOTE: '''EXAMPLES ONLY''', DON'T BIKESHED!) |
| 93 | * Database: DBDs (drivers), SQL clients, per-HLL DBI variants |
| 94 | * Testing: smoke/tinder/smolder clients, per-HLL Test::* variants |
| 95 | * Security: SSH, GPG, libpcap, ... |
| 96 | * Unixen: POSIX, Fcntl, Errno, ... |
| 97 | * Markup: YAML, libxml2, Expat, DOM, SAX, ... |
| 98 | * VCS: CVS, Subversion, git, Mercurial, ... |
| 99 | * Email: POP, IMAP, SMTP, MIME, ... |
| 100 | * GUI: Qt, GTK+, Wx, Tk, ... |
| 101 | * 2D Graphics: libpng, GD, SDL, Cairo, ... |
| 102 | * 3D Graphics: OpenGL, EGL, GLU, ... |
| 103 | * Sound: OpenAL, Pulse Audio, JACK, ... |
| 104 | * Game Support: Require other Power Packs: Audio, 2D/3D Graphics |
| 105 | |
| 106 | * Misc recommendations |
| 107 | * Separate 'parrot-modules' mailing list for module creators/users |
| 108 | only if parrot-dev traffic gets overwhelmed. |
| 109 | * Default to simple (CPAN-style) dependency resolution; upgrade to |
| 110 | full resolution and system package awareness in Basic Batteries. |
| 111 | * Names so far suggested for module repository network: |
| 112 | * Bird Words |
| 113 | * Aviary |
| 114 | * Birdseed |
| 115 | * Gluepot |
| 116 | * Plumage |
| 117 | * Roost |
| 118 | * Acronyms |
| 119 | * CPAAN |
| 120 | * FPAN |
| 121 | |
| 122 | = Metadata Proposal = |
| 123 | |
| 124 | * Required fields: |
| 125 | * meta-spec |
| 126 | * version |
| 127 | * uri |
| 128 | * name |
| 129 | * authority |
| 130 | * version |
| 131 | * license |
| 132 | * type |
| 133 | * uri |
| 134 | * copyright_holder |
| 135 | * abstract |
| 136 | * Manifest fields: |
| 137 | * files |
| 138 | * configure |
| 139 | * build |
| 140 | * test |
| 141 | * install |
| 142 | * share |
| 143 | * docs |
| 144 | * bin |
| 145 | * lib |
| 146 | * runtime |
| 147 | * Dependency fields (as { [dep_name]: [version_spec], ... }): |
| 148 | * provides |
| 149 | * conflicts |
| 150 | * requires |
| 151 | * fetch |
| 152 | * configure |
| 153 | * build |
| 154 | * test |
| 155 | * install |
| 156 | * runtime |
| 157 | * Optional features fields: |
| 158 | * optional_features |
| 159 | * [feature_name] |
| 160 | * description |
| 161 | * [any/all dependency fields as needed] |
| 162 | * Other optional fields: |
| 163 | * description |
| 164 | * keywords |
| 165 | * generated_by |
| 166 | * contributors |
| 167 | * authors |
| 168 | * maintainers |
| 169 | * translators |
| 170 | * testers |
| 171 | * reviewers |
| 172 | * resources |
| 173 | * source |
| 174 | * homepage |
| 175 | * bugtracker |
| 176 | * wiki |
| 177 | * repository |
| 178 | * type |
| 179 | * checkout_uri |
| 180 | * browser_uri |
| 181 | * project_uri |
| 182 | * mailinglists |
| 183 | * [list_name] |
| 184 | * address |
| 185 | * uri |
| 186 | * Undecided fields: |
| 187 | * dynamic_config |
| 188 | * no_index |
| 189 | * digests |
| 190 | * signatures |