Csound Csound-dev Csound-tekno Search About

[Csnd] Package Manager for Csound

Date2021-09-01 16:50
FromMichael Gogins
Subject[Csnd] Package Manager for Csound
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com
Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here

Date2021-09-01 18:14
FromGuillermo Senna
SubjectRe: [Csnd-dev] Package Manager for Csound

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 18:56
FromMichael Gogins
SubjectRe: [Csnd-dev] Package Manager for Csound
Thanks for your comments!

By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.

By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.

Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna <gsenna@gmail.com> wrote:

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 19:01
FromVictor Lazzarini
SubjectRe: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound
We already have 3), introduced by Eduardo. The plugins installers target that.

Prof. Victor Lazzarini
Maynooth University
Ireland

On 1 Sep 2021, at 18:14, Guillermo Senna <gsenna@gmail.com> wrote:



*Warning*

This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 19:28
FromGuillermo Senna
SubjectRe: [Csnd-dev] Package Manager for Csound

I get it, although personally I prefer the idea of not having a single repo tied to the csound organization where all pre-built packages end up. However, I believe the main issue remains: who's going to built and maintain this new multi-plaform package manager you propose?

On 1/9/21 14:56, Michael Gogins wrote:
Thanks for your comments!

By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.

By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.

Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna <gsenna@gmail.com> wrote:

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 19:36
FromMichael Gogins
SubjectRe: [Csnd-dev] Package Manager for Csound
I take your point about not tying users of the package manager to one official extensions repository. I amend my proposal to be configurable by users with additional extensions repositories.

About maintenance, there would be two aspects:

-- Maintaining, in the core Csound repository, the package manager program, which both uploads and downloads extensions.

-- Maintaining the extensions repository, which is essentially just a database of archives. That doesn't sound like much work to me.

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 2:29 PM Guillermo Senna <gsenna@gmail.com> wrote:

I get it, although personally I prefer the idea of not having a single repo tied to the csound organization where all pre-built packages end up. However, I believe the main issue remains: who's going to built and maintain this new multi-plaform package manager you propose?

On 1/9/21 14:56, Michael Gogins wrote:
Thanks for your comments!

By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.

By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.

Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna <gsenna@gmail.com> wrote:

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 19:41
FromRory Walsh
SubjectRe: [Csnd-dev] Package Manager for Csound
Maintaining this is one thing, but who is going to develop and build the system? 

On Wed, 1 Sept 2021 at 19:36, Michael Gogins <michael.gogins@gmail.com> wrote:
I take your point about not tying users of the package manager to one official extensions repository. I amend my proposal to be configurable by users with additional extensions repositories.

About maintenance, there would be two aspects:

-- Maintaining, in the core Csound repository, the package manager program, which both uploads and downloads extensions.

-- Maintaining the extensions repository, which is essentially just a database of archives. That doesn't sound like much work to me.

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 2:29 PM Guillermo Senna <gsenna@gmail.com> wrote:

I get it, although personally I prefer the idea of not having a single repo tied to the csound organization where all pre-built packages end up. However, I believe the main issue remains: who's going to built and maintain this new multi-plaform package manager you propose?

On 1/9/21 14:56, Michael Gogins wrote:
Thanks for your comments!

By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.

By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.

Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...

Regards,
Mike

-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna <gsenna@gmail.com> wrote:

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 19:54
FromGuillermo Senna
SubjectRe: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound

Funny you say this, Victor. I apologize, but I haven't been able to follow all the recent threads in this list. However, I see now that not only 3) has been recently covered by Eduardo, but also that Steven, François and others have already suggested similar things to 1) and 2) over the past few days!

On 1/9/21 15:01, Victor Lazzarini wrote:
We already have 3), introduced by Eduardo. The plugins installers target that.

Prof. Victor Lazzarini
Maynooth University
Ireland

On 1 Sep 2021, at 18:14, Guillermo Senna <gsenna@gmail.com> wrote:



*Warning*

This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.

Hi Michael:

Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).

Having said that, maybe a step forward in order to improve our current situation could be:

1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.

2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.

3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.

Anyway, that's my two cents.

Cheers.



On 1/9/21 12:50, Michael Gogins wrote:
I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 
The details...  

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

-- ChucK (open source), plugins repository for contributed extensions.

-- Pure Data (open source), built-in package manager for contributed extensions.

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

Proposal:

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

The package manager commands are:

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.
--dependencies - list dependencies of packages.
--remove - remove packages.

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

manifest.json
SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.
deb/ for Debian packages.
exe/ for Windows installers.
dmg/ for MacOS installers.
apk/ for Android installers.
npm/ for NPM packages.
NODE/arch for binary Node.js and JW.js addons.

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

The manifest format is:
{
  name: "package_name";
  version: "1.2.3.alpha";
  author: "author name";
  license: "standard license name";
  description: "What is this extension for?";
  repository: "where if anywhere is the source code repository?";
  tags: "comma-delimited list of searchable tags.";
  dependencies: {
    "triplet_1:" [list of dependencies];
    "triplet_2": [list of dependencies];
    ...
  }; 
 };

It is not necessary to list the contents of the package, that can be inferred from the archive.

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

Regards,
Mike





The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

Regards,
Mike


-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Date2021-09-01 20:43
FromJoel Ross
SubjectRe: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound
Michael,

I have a couple of concerns about this which I'd like to raise.

One is about sharing code which depends on these packages. If I get a
.csd file which depends on a number of external packages, how do I
know which ones I need, and which versions in order to run it? Would
the .csd need some metadata which specifies packages and version? If
it does, should it be enforced (so the modules don't get loaded unless
they are specified, like python's import system).

The second concern is about the volatility. If there are many
extensions with varying degrees of maintenance, particularly if they
have external dependencies, which in turn must be maintained, then the
promise that csound has always kept that I can write a piece now and
perform it in a decade seems difficult to keep.

I don't think either of these are reasons not to proceed but rather to
do so carefully.

 Joel

On Wed, 1 Sept 2021 at 19:54, Guillermo Senna  wrote:
>
> Funny you say this, Victor. I apologize, but I haven't been able to follow all the recent threads in this list. However, I see now that not only 3) has been recently covered by Eduardo, but also that Steven, François and others have already suggested similar things to 1) and 2) over the past few days!
>
> On 1/9/21 15:01, Victor Lazzarini wrote:
>
> We already have 3), introduced by Eduardo. The plugins installers target that.
>
> Prof. Victor Lazzarini
> Maynooth University
> Ireland
>
> On 1 Sep 2021, at 18:14, Guillermo Senna  wrote:
>
> 
> *Warning* This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
>
> Hi Michael:
>
> Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).
>
> Having said that, maybe a step forward in order to improve our current situation could be:
>
> 1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.
>
> 2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.
>
> 3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.
>
> Anyway, that's my two cents.
>
> Cheers.
>
>
>
> On 1/9/21 12:50, Michael Gogins wrote:
>
> I think it's time to do this. It would solve most of the vexing issues with a plugins repository.
>
> TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
>
> The details...
>
> Here's the current status of Csound versus its main alternatives regarding contributed extensions:
>
> -- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.
>
> -- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.
>
> -- ChucK (open source), plugins repository for contributed extensions.
>
> -- Pure Data (open source), built-in package manager for contributed extensions.
>
> -- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.
>
> -- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.
>
> Proposal:
>
> Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions).
>
> This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.
>
> The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.
>
> The package manager commands are:
>
> --contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
> --list - list packages in the package repository.
> --search - search in the package repository manifests.
> --information - print the package manifest.
> --install - install packages if the platform is supported.
> --dependencies - list dependencies of packages.
> --remove - remove packages.
>
> A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).
>
> manifest.json
> SFDIR/ for soundfiles.
> SSDIR/ for samples.
> SADIR/ for analysis files.
> INCDIR/ for .csd, orc., and include files.
> OPCODE6DIR/triplet/ for loadable modules.
> OPCODE6DIR64/triplet/ for loadable modules.
> MFDIR/ for MIDI files.
> deb/ for Debian packages.
> exe/ for Windows installers.
> dmg/ for MacOS installers.
> apk/ for Android installers.
> npm/ for NPM packages.
> NODE/arch for binary Node.js and JW.js addons.
>
> Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.
>
> The manifest format is:
> {
>   name: "package_name";
>   version: "1.2.3.alpha";
>   author: "author name";
>   license: "standard license name";
>   description: "What is this extension for?";
>   repository: "where if anywhere is the source code repository?";
>   tags: "comma-delimited list of searchable tags.";
>   dependencies: {
>     "triplet_1:" [list of dependencies];
>     "triplet_2": [list of dependencies];
>     ...
>   };
>  };
>
> It is not necessary to list the contents of the package, that can be inferred from the archive.
>
> As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.
>
> Regards,
> Mike
>
>
>
>
>
> The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.
>
> Regards,
> Mike
>
>
> -----------------------------------------------------
> Michael Gogins
> Irreducible Productions
> http://michaelgogins.tumblr.com
> Michael dot Gogins at gmail dot com

Date2021-09-01 21:09
FromMichael Gogins
SubjectRe: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound
Thanks for your comments.

Taking up your second concern first, this kind of thing is always a problem in any software community. I don't have a complete solution. The Csound promise would then be, "If you write a piece using opcodes maintained in the Csound repository, you will be able to perform it into the indefinite future. If you write a piece using extensions to Csound, then you will be able to perform it as long as the extension runs (it will always be available as a download)." 

This is not at all different from the current situation.

About your first concern, this could be solved, ASSUMING that the package manager is built into Csound, by having Csound itself use the package manager to search for opcodes whose names are not resolved at run time, and Csound will notify the user of their availability. Indeed Csound could be configured to automatically install such opcodes (this is what the LaTeX system does, with its packages).
-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Wed, Sep 1, 2021 at 3:43 PM Joel Ross <joel.binarybrain@gmail.com> wrote:
Michael,

I have a couple of concerns about this which I'd like to raise.

One is about sharing code which depends on these packages. If I get a
.csd file which depends on a number of external packages, how do I
know which ones I need, and which versions in order to run it? Would
the .csd need some metadata which specifies packages and version? If
it does, should it be enforced (so the modules don't get loaded unless
they are specified, like python's import system).

The second concern is about the volatility. If there are many
extensions with varying degrees of maintenance, particularly if they
have external dependencies, which in turn must be maintained, then the
promise that csound has always kept that I can write a piece now and
perform it in a decade seems difficult to keep.

I don't think either of these are reasons not to proceed but rather to
do so carefully.

 Joel

On Wed, 1 Sept 2021 at 19:54, Guillermo Senna <gsenna@gmail.com> wrote:
>
> Funny you say this, Victor. I apologize, but I haven't been able to follow all the recent threads in this list. However, I see now that not only 3) has been recently covered by Eduardo, but also that Steven, François and others have already suggested similar things to 1) and 2) over the past few days!
>
> On 1/9/21 15:01, Victor Lazzarini wrote:
>
> We already have 3), introduced by Eduardo. The plugins installers target that.
>
> Prof. Victor Lazzarini
> Maynooth University
> Ireland
>
> On 1 Sep 2021, at 18:14, Guillermo Senna <gsenna@gmail.com> wrote:
>
> 
> *Warning* This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
>
> Hi Michael:
>
> Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).
>
> Having said that, maybe a step forward in order to improve our current situation could be:
>
> 1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.
>
> 2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.
>
> 3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.
>
> Anyway, that's my two cents.
>
> Cheers.
>
>
>
> On 1/9/21 12:50, Michael Gogins wrote:
>
> I think it's time to do this. It would solve most of the vexing issues with a plugins repository.
>
> TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
>
> The details...
>
> Here's the current status of Csound versus its main alternatives regarding contributed extensions:
>
> -- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.
>
> -- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.
>
> -- ChucK (open source), plugins repository for contributed extensions.
>
> -- Pure Data (open source), built-in package manager for contributed extensions.
>
> -- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.
>
> -- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.
>
> Proposal:
>
> Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions).
>
> This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.
>
> The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.
>
> The package manager commands are:
>
> --contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
> --list - list packages in the package repository.
> --search - search in the package repository manifests.
> --information - print the package manifest.
> --install - install packages if the platform is supported.
> --dependencies - list dependencies of packages.
> --remove - remove packages.
>
> A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).
>
> manifest.json
> SFDIR/ for soundfiles.
> SSDIR/ for samples.
> SADIR/ for analysis files.
> INCDIR/ for .csd, orc., and include files.
> OPCODE6DIR/triplet/ for loadable modules.
> OPCODE6DIR64/triplet/ for loadable modules.
> MFDIR/ for MIDI files.
> deb/ for Debian packages.
> exe/ for Windows installers.
> dmg/ for MacOS installers.
> apk/ for Android installers.
> npm/ for NPM packages.
> NODE/arch for binary Node.js and JW.js addons.
>
> Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.
>
> The manifest format is:
> {
>   name: "package_name";
>   version: "1.2.3.alpha";
>   author: "author name";
>   license: "standard license name";
>   description: "What is this extension for?";
>   repository: "where if anywhere is the source code repository?";
>   tags: "comma-delimited list of searchable tags.";
>   dependencies: {
>     "triplet_1:" [list of dependencies];
>     "triplet_2": [list of dependencies];
>     ...
>   };
>  };
>
> It is not necessary to list the contents of the package, that can be inferred from the archive.
>
> As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.
>
> Regards,
> Mike
>
>
>
>
>
> The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.
>
> Regards,
> Mike
>
>
> -----------------------------------------------------
> Michael Gogins
> Irreducible Productions
> http://michaelgogins.tumblr.com
> Michael dot Gogins at gmail dot com

Date2021-09-02 01:52
FromStephen Kyne
SubjectRe: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound
The first point is valid but the same problem exists now anyways, no? Any external Csound extension installed breaks compatibility with another vanilla installation. I think ideally with this new system, Csound would automatically install missing items if detected in a CSD file. Easier said than done of course.

Deno (the node alternative) has taken a different approach to Node/NPM by specifying imports as URLs rather than package names. This removes the need to query a central server.

So instead of 

import {add, multiply} from "ramda";

you get something like

import {
  add,
  multiply,
} from "https://x.nest.land/ramda@0.27.0/source/index.js";

I think this could be a nice solution if used in Csound. It would mean the CSD file documents what is external and also where to get it. Csound could also fetch the binaries as a pre run step potentially. Or maybe as a manual but easy command line step e.g. "cspm install" in the current dir. I think that is quite user friendly then.

The second issue is also true but I think a repo/set of binaries hosted and partially maintained by the csound team will more likely be around years down the line than a random user repo and hosted solution. 

Rory and others mentioned, who is going to build all of this. It's not a small feat and I'd really scale down the expectations. I don't think any packages should be specifying dependencies. That introduces a world of complexity. I think it should be a simple download mechanism with very light versioning i.e. determine the import, download the file and extract to the appropriate user directory. 

Afaik, Risset does a lot of this and looks good. My only concern is the Python dependency which is less common on Windows. 

Stephen


From: Csound-developers <CSOUND-DEV@LISTSERV.HEANET.IE> on behalf of Joel Ross <joel.binarybrain@GMAIL.COM>
Sent: Wednesday 1 September 2021 20:43
To: CSOUND-DEV@LISTSERV.HEANET.IE <CSOUND-DEV@LISTSERV.HEANET.IE>
Subject: Re: [Csnd-dev] [EXTERNAL] Re: [Csnd-dev] Package Manager for Csound
 
Michael,

I have a couple of concerns about this which I'd like to raise.

One is about sharing code which depends on these packages. If I get a
.csd file which depends on a number of external packages, how do I
know which ones I need, and which versions in order to run it? Would
the .csd need some metadata which specifies packages and version? If
it does, should it be enforced (so the modules don't get loaded unless
they are specified, like python's import system).

The second concern is about the volatility. If there are many
extensions with varying degrees of maintenance, particularly if they
have external dependencies, which in turn must be maintained, then the
promise that csound has always kept that I can write a piece now and
perform it in a decade seems difficult to keep.

I don't think either of these are reasons not to proceed but rather to
do so carefully.

 Joel

On Wed, 1 Sept 2021 at 19:54, Guillermo Senna <gsenna@gmail.com> wrote:
>
> Funny you say this, Victor. I apologize, but I haven't been able to follow all the recent threads in this list. However, I see now that not only 3) has been recently covered by Eduardo, but also that Steven, François and others have already suggested similar things to 1) and 2) over the past few days!
>
> On 1/9/21 15:01, Victor Lazzarini wrote:
>
> We already have 3), introduced by Eduardo. The plugins installers target that.
>
> Prof. Victor Lazzarini
> Maynooth University
> Ireland
>
> On 1 Sep 2021, at 18:14, Guillermo Senna <gsenna@gmail.com> wrote:
>
> 
> *Warning* This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
>
> Hi Michael:
>
> Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).
>
> Having said that, maybe a step forward in order to improve our current situation could be:
>
> 1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.
>
> 2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.
>
> 3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.
>
> Anyway, that's my two cents.
>
> Cheers.
>
>
>
> On 1/9/21 12:50, Michael Gogins wrote:
>
> I think it's time to do this. It would solve most of the vexing issues with a plugins repository.
>
> TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
>
> The details...
>
> Here's the current status of Csound versus its main alternatives regarding contributed extensions:
>
> -- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.
>
> -- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.
>
> -- ChucK (open source), plugins repository for contributed extensions.
>
> -- Pure Data (open source), built-in package manager for contributed extensions.
>
> -- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.
>
> -- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.
>
> Proposal:
>
> Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions).
>
> This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.
>
> The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.
>
> The package manager commands are:
>
> --contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
> --list - list packages in the package repository.
> --search - search in the package repository manifests.
> --information - print the package manifest.
> --install - install packages if the platform is supported.
> --dependencies - list dependencies of packages.
> --remove - remove packages.
>
> A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).
>
> manifest.json
> SFDIR/ for soundfiles.
> SSDIR/ for samples.
> SADIR/ for analysis files.
> INCDIR/ for .csd, orc., and include files.
> OPCODE6DIR/triplet/ for loadable modules.
> OPCODE6DIR64/triplet/ for loadable modules.
> MFDIR/ for MIDI files.
> deb/ for Debian packages.
> exe/ for Windows installers.
> dmg/ for MacOS installers.
> apk/ for Android installers.
> npm/ for NPM packages.
> NODE/arch for binary Node.js and JW.js addons.
>
> Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.
>
> The manifest format is:
> {
>   name: "package_name";
>   version: "1.2.3.alpha";
>   author: "author name";
>   license: "standard license name";
>   description: "What is this extension for?";
>   repository: "where if anywhere is the source code repository?";
>   tags: "comma-delimited list of searchable tags.";
>   dependencies: {
>     "triplet_1:" [list of dependencies];
>     "triplet_2": [list of dependencies];
>     ...
>   };
>  };
>
> It is not necessary to list the contents of the package, that can be inferred from the archive.
>
> As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.
>
> Regards,
> Mike
>
>
>
>
>
> The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.
>
> Regards,
> Mike
>
>
> -----------------------------------------------------
> Michael Gogins
> Irreducible Productions
> http://michaelgogins.tumblr.com
> Michael dot Gogins at gmail dot com

Date2021-09-02 04:19
FromMarc Demers
Subject[Csnd] RE=?Windows-1252?Q?=A0=3A_?=[Csnd] Package Manager for Csound

Hi Mike,

 

Sound good…I think that Cabbage is running in this way since there is a automated build for Mac, Linux and Windows.

 

Regards,

 

Marc

 

 

Envoyé à partir de Courrier pour Windows

 

De : Michael Gogins
Envoyé le :mercredi 1 septembre 2021 11:50
À : CSOUND@LISTSERV.HEANET.IE
Objet :[Csnd] Package Manager for Csound

 

I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

 

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 

The details...  

 

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

 

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

 

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

 

-- ChucK (open source), plugins repository for contributed extensions.

 

-- Pure Data (open source), built-in package manager for contributed extensions.

 

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

 

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

 

Proposal:

 

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

 

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

 

The package manager commands are:

 

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.

--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.

--dependencies - list dependencies of packages.
--remove - remove packages.

 

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

 

manifest.json

SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.

deb/ for Debian packages.

exe/ for Windows installers.

dmg/ for MacOS installers.

apk/ for Android installers.

npm/ for NPM packages.

NODE/arch for binary Node.js and JW.js addons.

 

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

 

The manifest format is:

{

  name: "package_name";

  version: "1.2.3.alpha";

  author: "author name";

  license: "standard license name";

  description: "What is this extension for?";

  repository: "where if anywhere is the source code repository?";

  tags: "comma-delimited list of searchable tags.";

  dependencies: {

    "triplet_1:" [list of dependencies];

    "triplet_2": [list of dependencies];

    ...

  }; 

 };

 

It is not necessary to list the contents of the package, that can be inferred from the archive.

 

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

 

Regards,

Mike

 

 

 

 

 

The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

 

Regards,

Mike


 

-----------------------------------------------------

Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here

 


Date2021-09-02 08:30
FromRory Walsh
SubjectRe: [Csnd] RE : [Csnd] Package Manager for Csound
Csound also has CI builds on each git commit. It's very useful for testing but it takes time to set up. 

On Thu 2 Sep 2021, 4:19 a.m. Marc Demers, <caecos@hotmail.ca> wrote:

Hi Mike,

 

Sound good…I think that Cabbage is running in this way since there is a automated build for Mac, Linux and Windows.

 

Regards,

 

Marc

 

 

Envoyé à partir de Courrier pour Windows

 

De : Michael Gogins
Envoyé le :mercredi 1 septembre 2021 11:50
À : CSOUND@LISTSERV.HEANET.IE
Objet :[Csnd] Package Manager for Csound

 

I think it's time to do this. It would solve most of the vexing issues with a plugins repository.

 

TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
 

The details...  

 

Here's the current status of Csound versus its main alternatives regarding contributed extensions:

 

-- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.

 

-- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.

 

-- ChucK (open source), plugins repository for contributed extensions.

 

-- Pure Data (open source), built-in package manager for contributed extensions.

 

-- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.

 

-- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.

 

Proposal:

 

Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 

 

This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.

 

The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.

 

The package manager commands are:

 

--contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.

--list - list packages in the package repository.
--search - search in the package repository manifests.
--information - print the package manifest.
--install - install packages if the platform is supported.

--dependencies - list dependencies of packages.
--remove - remove packages.

 

A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).

 

manifest.json

SFDIR/ for soundfiles.
SSDIR/ for samples.
SADIR/ for analysis files.
INCDIR/ for .csd, orc., and include files.
OPCODE6DIR/triplet/ for loadable modules.
OPCODE6DIR64/triplet/ for loadable modules.
MFDIR/ for MIDI files.

deb/ for Debian packages.

exe/ for Windows installers.

dmg/ for MacOS installers.

apk/ for Android installers.

npm/ for NPM packages.

NODE/arch for binary Node.js and JW.js addons.

 

Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.

 

The manifest format is:

{

  name: "package_name";

  version: "1.2.3.alpha";

  author: "author name";

  license: "standard license name";

  description: "What is this extension for?";

  repository: "where if anywhere is the source code repository?";

  tags: "comma-delimited list of searchable tags.";

  dependencies: {

    "triplet_1:" [list of dependencies];

    "triplet_2": [list of dependencies];

    ...

  }; 

 };

 

It is not necessary to list the contents of the package, that can be inferred from the archive.

 

As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.

 

Regards,

Mike

 

 

 

 

 

The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.

 

Regards,

Mike


 

-----------------------------------------------------

Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com

Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here

 

Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here
Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here

Date2021-09-02 08:42
FromVictor Lazzarini
SubjectRe: [Csnd-dev] [EXTERNAL] [Csnd-dev] Package Manager for Csound
Also, if the package manager itself is part of Csound, it becomes an extra element to keep maintained 
and kept running correctly. It increases the complexity of the system as a whole.
========================
Prof. Victor Lazzarini
Maynooth University
Ireland

> On 1 Sep 2021, at 19:41, Rory Walsh  wrote:
> 
> WARNINGThis email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
> Maintaining this is one thing, but who is going to develop and build the system? 
> 
> On Wed, 1 Sept 2021 at 19:36, Michael Gogins  wrote:
> I take your point about not tying users of the package manager to one official extensions repository. I amend my proposal to be configurable by users with additional extensions repositories.
> 
> About maintenance, there would be two aspects:
> 
> -- Maintaining, in the core Csound repository, the package manager program, which both uploads and downloads extensions.
> 
> -- Maintaining the extensions repository, which is essentially just a database of archives. That doesn't sound like much work to me.
> 
> Regards,
> Mike
> 
> -----------------------------------------------------
> Michael Gogins
> Irreducible Productions
> http://michaelgogins.tumblr.com
> Michael dot Gogins at gmail dot com
> 
> 
> On Wed, Sep 1, 2021 at 2:29 PM Guillermo Senna  wrote:
> I get it, although personally I prefer the idea of not having a single repo tied to the csound organization where all pre-built packages end up. However, I believe the main issue remains: who's going to built and maintain this new multi-plaform package manager you propose?
> 
> On 1/9/21 14:56, Michael Gogins wrote:
>> Thanks for your comments!
>> 
>> By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.
>> 
>> By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.
>> 
>> Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...
>> 
>> Regards,
>> Mike
>> 
>> -----------------------------------------------------
>> Michael Gogins
>> Irreducible Productions
>> http://michaelgogins.tumblr.com
>> Michael dot Gogins at gmail dot com
>> 
>> 
>> On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna  wrote:
>> Hi Michael:
>> 
>> Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).
>> 
>> Having said that, maybe a step forward in order to improve our current situation could be:
>> 
>> 1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.
>> 
>> 2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.
>> 
>> 3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.
>> 
>> Anyway, that's my two cents.
>> 
>> Cheers.
>> 
>> 
>> 
>> 
>> 
>> On 1/9/21 12:50, Michael Gogins wrote:
>>> I think it's time to do this. It would solve most of the vexing issues with a plugins repository.
>>> 
>>> TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
>>>  
>>> The details...  
>>> 
>>> Here's the current status of Csound versus its main alternatives regarding contributed extensions:
>>> 
>>> -- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.
>>> 
>>> -- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.
>>> 
>>> -- ChucK (open source), plugins repository for contributed extensions.
>>> 
>>> -- Pure Data (open source), built-in package manager for contributed extensions.
>>> 
>>> -- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.
>>> 
>>> -- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.
>>> 
>>> Proposal:
>>> 
>>> Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions). 
>>> 
>>> This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.
>>> 
>>> The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.
>>> 
>>> The package manager commands are:
>>> 
>>> --contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
>>> --list - list packages in the package repository.
>>> --search - search in the package repository manifests.
>>> --information - print the package manifest.
>>> --install - install packages if the platform is supported.
>>> --dependencies - list dependencies of packages.
>>> --remove - remove packages.
>>> 
>>> A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).
>>> 
>>> manifest.json
>>> SFDIR/ for soundfiles.
>>> SSDIR/ for samples.
>>> SADIR/ for analysis files.
>>> INCDIR/ for .csd, orc., and include files.
>>> OPCODE6DIR/triplet/ for loadable modules.
>>> OPCODE6DIR64/triplet/ for loadable modules.
>>> MFDIR/ for MIDI files.
>>> deb/ for Debian packages.
>>> exe/ for Windows installers.
>>> dmg/ for MacOS installers.
>>> apk/ for Android installers.
>>> npm/ for NPM packages.
>>> NODE/arch for binary Node.js and JW.js addons.
>>> 
>>> Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.
>>> 
>>> The manifest format is:
>>> {
>>>   name: "package_name";
>>>   version: "1.2.3.alpha";
>>>   author: "author name";
>>>   license: "standard license name";
>>>   description: "What is this extension for?";
>>>   repository: "where if anywhere is the source code repository?";
>>>   tags: "comma-delimited list of searchable tags.";
>>>   dependencies: {
>>>     "triplet_1:" [list of dependencies];
>>>     "triplet_2": [list of dependencies];
>>>     ...
>>>   }; 
>>>  };
>>> 
>>> It is not necessary to list the contents of the package, that can be inferred from the archive.
>>> 
>>> As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.
>>> 
>>> Regards,
>>> Mike
>>> 
>>> 
>>> 
>>> 
>>> 
>>> The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.
>>> 
>>> Regards,
>>> Mike
>>> 
>>> 
>>> -----------------------------------------------------
>>> Michael Gogins
>>> Irreducible Productions
>>> http://michaelgogins.tumblr.com
>>> Michael dot Gogins at gmail dot com

Date2021-09-02 19:42
From"amindfv@mailbox.org" <000008d9de3398eb-dmarc-request@LISTSERV.HEANET.IE>
SubjectRe: [Csnd-dev] Package Manager for Csound
AttachmentsNone  

Date2021-09-02 21:29
FromMichael Gogins
SubjectRe: [Csnd-dev] [EXTERNAL] [Csnd-dev] Package Manager for Csound
I can see there is no support among the current core Csound developers for either a built-in package manager, or for a centralized repository of prebuilt packages.

I would be willing to contribute a builtin package manager if I thought the other developers would accept it, and provide some testing on MacOS and Windows.

I have looked again at the Risset package manager and the risset-data repository. This does much of what I propose. However:

1. Risset is written in Python and this increases the complexity of installing and using it for naive users.
2. Risset does not use standard identifiers for runtime architectures, such as VCPKG triplets. There is just "linux", "windows", and "macos."
3. Risset does not itself provide a simple means of uploading contributions. Contributors must fork risset-data and issue a pull request.
4. Most importantly, Risset is not a builtin part of Csound.

I am thinking what to do. 

Regards,
Mike



-----------------------------------------------------
Michael Gogins
Irreducible Productions
http://michaelgogins.tumblr.com
Michael dot Gogins at gmail dot com


On Thu, Sep 2, 2021 at 3:42 AM Victor Lazzarini <Victor.Lazzarini@mu.ie> wrote:
Also, if the package manager itself is part of Csound, it becomes an extra element to keep maintained
and kept running correctly. It increases the complexity of the system as a whole.
========================
Prof. Victor Lazzarini
Maynooth University
Ireland

> On 1 Sep 2021, at 19:41, Rory Walsh <rorywalsh@ear.ie> wrote:
>
> WARNINGThis email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
> Maintaining this is one thing, but who is going to develop and build the system?
>
> On Wed, 1 Sept 2021 at 19:36, Michael Gogins <michael.gogins@gmail.com> wrote:
> I take your point about not tying users of the package manager to one official extensions repository. I amend my proposal to be configurable by users with additional extensions repositories.
>
> About maintenance, there would be two aspects:
>
> -- Maintaining, in the core Csound repository, the package manager program, which both uploads and downloads extensions.
>
> -- Maintaining the extensions repository, which is essentially just a database of archives. That doesn't sound like much work to me.
>
> Regards,
> Mike
>
> -----------------------------------------------------
> Michael Gogins
> Irreducible Productions
> http://michaelgogins.tumblr.com
> Michael dot Gogins at gmail dot com
>
>
> On Wed, Sep 1, 2021 at 2:29 PM Guillermo Senna <gsenna@gmail.com> wrote:
> I get it, although personally I prefer the idea of not having a single repo tied to the csound organization where all pre-built packages end up. However, I believe the main issue remains: who's going to built and maintain this new multi-plaform package manager you propose?
>
> On 1/9/21 14:56, Michael Gogins wrote:
>> Thanks for your comments!
>>
>> By omitting the requirement of compiling extensions within the repository, and putting the onus for that on the contributors to the repository, I have omitted all the complexities that have bedeviled similar efforts in the past.
>>
>> By making the package manager a builtin part of Csound, and documenting it, that would make installing extensions crystal clear to all users.
>>
>> Perhaps you missed the part where I specified that the builtin package manager would also be capable of uploading new extensions?...
>>
>> Regards,
>> Mike
>>
>> -----------------------------------------------------
>> Michael Gogins
>> Irreducible Productions
>> http://michaelgogins.tumblr.com
>> Michael dot Gogins at gmail dot com
>>
>>
>> On Wed, Sep 1, 2021 at 1:14 PM Guillermo Senna <gsenna@gmail.com> wrote:
>> Hi Michael:
>>
>> Nice proposal. I think the real issue is that nobody seems to have the time to properly maintain a new package manager. That's why some time ago we thought about re-using existing package managers. Sadly, we couldn't find a really good candidate (some aren't multi-platform, some are too complex for our needs, some are GUI-only, some weren't properly designed from the beginning, etc).
>>
>> Having said that, maybe a step forward in order to improve our current situation could be:
>>
>> 1) to set-up (if it already isn't?) some sort of template project in github for third-party developers to imitate.
>>
>> 2) to have a web page inside csound.com that links to these github projects, or better to their corresponding github.io page where at least two things are located: the download link to the latest version and a help page in the style of the reference manual.
>>
>> 3) to have a clearly defined path inside user-space where users could download-and-drop these new plugins, UDOs, instruments defs., etc. Then maybe an associated "version" file could contain the necessary information for front-ends to check for current compatibility, or maybe even the aforementioned front-ends could make a quick online check to let the users know when there's a new version available for them to go download and replace the old ones with. Something like that.
>>
>> Anyway, that's my two cents.
>>
>> Cheers.
>>
>>
>>
>>
>>
>> On 1/9/21 12:50, Michael Gogins wrote:
>>> I think it's time to do this. It would solve most of the vexing issues with a plugins repository.
>>>
>>> TL;DR: This is built into Csound. It automates UPLOADING extensions, and it automates FINDING and INSTALLING extensions. Unlike Steven Yi's proposal this does not automate BUILDING extensions, contributors are still responsible for that. But that could certainly be added later in the form of GitHub actions.
>>> 
>>> The details... 
>>>
>>> Here's the current status of Csound versus its main alternatives regarding contributed extensions:
>>>
>>> -- Csound (open source), contributors maintain and distribute their own extensions. Partial exceptions: plugins and risset.
>>>
>>> -- Max/MSP (proprietary but most widely used), built-in package manager for contributed extensions.
>>>
>>> -- ChucK (open source), plugins repository for contributed extensions.
>>>
>>> -- Pure Data (open source), built-in package manager for contributed extensions.
>>>
>>> -- Purr-data (open source), many extensions are contributed to the main repository by pull request and maintained there.
>>>
>>> -- Supercollider (open source), plugins repository for contributed extensions, SuperCollider language extensions are in https://github.com/supercollider-quarks.
>>>
>>> Proposal:
>>>
>>> Csound gets a built-in package manager (cspm) for plugin opcodes, fgens, and extensions written in Csound languages (e.g. UDOs and instrument definitions).
>>>
>>> This is a csound utility program/opcode. It is loosely modeled on the existing risset package manager, vcpkg, and deken. Simply using vcpkg would work, but would force contributors to jump through unnecessary hoops.
>>>
>>> The package manager maintains contributions in a GitHub repository named csound-extensions, licensed LGPLv2.1.
>>>
>>> The package manager commands are:
>>>
>>> --contribute - upload a contribution to the contributor's account in the csound-extensions repository. The contribution must consist of a directory in a standard format containing a package manifest and pre-built package contents. The contributor must have a GitHub account.
>>> --list - list packages in the package repository.
>>> --search - search in the package repository manifests.
>>> --information - print the package manifest.
>>> --install - install packages if the platform is supported.
>>> --dependencies - list dependencies of packages.
>>> --remove - remove packages.
>>>
>>> A Csound extension package is a zip file with a .cse filename extension in the following structure based on Csound environment variables qualified where necessary by runtime architecture (specified as for vcpkg triplets, e.g. x64-windows, x64-osx, x64-linux).
>>>
>>> manifest.json
>>> SFDIR/ for soundfiles.
>>> SSDIR/ for samples.
>>> SADIR/ for analysis files.
>>> INCDIR/ for .csd, orc., and include files.
>>> OPCODE6DIR/triplet/ for loadable modules.
>>> OPCODE6DIR64/triplet/ for loadable modules.
>>> MFDIR/ for MIDI files.
>>> deb/ for Debian packages.
>>> exe/ for Windows installers.
>>> dmg/ for MacOS installers.
>>> apk/ for Android installers.
>>> npm/ for NPM packages.
>>> NODE/arch for binary Node.js and JW.js addons.
>>>
>>> Extensions with third party dependencies are the main problem. Rather than solve this problem, either (a) the package contains an inner package that manages its own dependencies such as a vcpkg package or a Debian package, or (b) the manifest simply lists all third-party dependencies.
>>>
>>> The manifest format is:
>>> {
>>>   name: "package_name";
>>>   version: "1.2.3.alpha";
>>>   author: "author name";
>>>   license: "standard license name";
>>>   description: "What is this extension for?";
>>>   repository: "where if anywhere is the source code repository?";
>>>   tags: "comma-delimited list of searchable tags.";
>>>   dependencies: {
>>>     "triplet_1:" [list of dependencies];
>>>     "triplet_2": [list of dependencies];
>>>     ...
>>>   };
>>>  };
>>>
>>> It is not necessary to list the contents of the package, that can be inferred from the archive.
>>>
>>> As I mentioned, it would be possible to add automated builds for all supported platforms later, and this of course would also require creating Git submodules or source directories for each contribution, but what I have outlined should be doable pretty quickly.
>>>
>>> Regards,
>>> Mike
>>>
>>>
>>>
>>>
>>>
>>> The package manager uses the GitHub API to upload contributions from a contributor's package directory as a pull request. And it uses the GitHub API to download packages, which it then installs according to the manifest.
>>>
>>> Regards,
>>> Mike
>>>
>>>
>>> -----------------------------------------------------
>>> Michael Gogins
>>> Irreducible Productions
>>> http://michaelgogins.tumblr.com
>>> Michael dot Gogins at gmail dot com