Skip to content

GSoC_2018_project_distribution

Viktor Gal edited this page Jan 29, 2018 · 3 revisions

Distributing Shogun

Installing Shogun is not the easiest task from source. Hence, we have started to add support for binary distribution of Shogun. Currently there are two ways to get on hold of libshogun, the C++ API and the Python interface:

This is not even covering half of the distributions and interfaces that Shogun supports. The aim of the project would be to extend the supported packaging frameworks and integrate with them.

Mentors

Difficulty & Requirements

Medium.

You need know

  • various packaging methods (deb, npm, jar, pypi etc.)
  • basic DevOps skills
  • basic buildbot knowledge

Description

As mentioned we currently only support binary packages for the C++ and Python API, that barely covers the most use-cases.

We would like to be able to integrate with all the language specific packing systems, that would allow various users of Shogun to quickly install the library and use it out of box.

Namely, we would like to integrate with the following packaging systems---the list is in priority order:

  • Maven and JigSaw for Java/JVM
  • PyPi for Python
  • CRAN for R
  • WebAssembly for JavaScript
  • NuGet for MS Windows and C#
  • RubyGems
  • NPM for JavaScript

Ideally by the end of the GSoC project there would be integration with all of these packaging framework as well as integrating it into our release pipeline (done in buildbot) so the new releases would automatically roll out everywhere.

WebAssembly

WebAssembly is a great initiative that is a new portable, size- and load-time-efficient format suitable for compilation to the web. Using emscripten one can take a C/C++ code and compile it into a JavaScript code that uses asm.js. Using this the idea is to create wasm of shogun and run it in the user's browser (or at least part of it).

There has been experiments done on OpenCV and WebAssembly, which has a similarly complex and big C/C++ codebase as Shogun. This could be a good starting point for this task.

Useful resources

Clone this wiki locally