===== Development Partner Profile ===== ==== Skills ==== The [[SavaPage:Technical Features|Technical Features]] of SavaPage show a broad field of topics a developer needs to know about. This knowledge, together with design skills and programming skills for Java, HTML, CSS, JavaScript and C/C++ is all needed to construct the SavaPage solution. Obviously these skills are rarely present in one person. Let alone that a person possesses all of these skills at the same high level of proficiency. Fortunately a partner with knowledge of some key topics can start to be productive on well-defined modular tasks and acquire the necessary skills along the way. ==== Tasks ==== To simplify development and maintenance SavaPage follows a modular design according to the [[wp>Separation_of_concerns|separation of concerns]] (SoC) principle. Several module types are identified: * An **External** Module runs as a separate process and collaborates with SavaPage run-time via [[wp>Inter-process_communication|Inter-process communication]]. Examples are [[https://gitlab.com/savapage/savapage-cups-notifier|savapage-cups-notifier]], [[https://gitlab.com/savapage/savapage-nss|savapage-nss]], [[https://gitlab.com/savapage/savapage-pam|savapage-pam]] and [[https://gitlab.com/savapage/savapage-nfc-reader|savapage-nfc-reader]]. * **Internal** modules are part of SavaPage run-time and collaborate via shared memory. There are two types: * **Drop-in** modules are a fixed part of the application package. * **[[wp>Plug-in_(computing)|Plug-in]]** modules are separate packages that bind ad-hoc with SavaPage at run-time. * A **Utility** is a small specialized module that is an //addition// to the SavaPage project but does ''not'' collaborate with SavaPage run-time. To lower the threshold for Development Partners to engage, a list of pre-defined tasks is available to pick from. Each task is described as a //module// with a well-defined interface and responsibility. The module is either new or does already exist and needs to be refactored (or debugged). Tasks vary in scope and complexity. They can encompass a single method or class, or can be a composite of sub-modules implementing a comprehensive behavioral pattern. The deliverable of a task is tested and documented source code that is pushed to the "develop" branch of a [[https://gitlab.com/savapage|central repository]]. **Important:** before claiming a task a partner should discuss his plans with the Community Manager. //All Development Partners are members of one team. Informal communication between members is important and highly encouraged. And above all, enjoy!// ==== Business Model ==== [[:subscription|Subscription]] revenues are shared among Development Partners proportional to their efforts. ==== Fiduciary License Agreement ==== As [[https://www.datraverse.com/|Datraverse B.V.]] is the [[/:Legal|legal entity]] protecting the copyright of the project, as a binding policy, Development Partners must grant the copyright of their software contributions to Datraverse B.V. according to the Fiduciary Licence Agreement (FLA) as created by the [[https://fsfe.org/activities/ftf/fla.en.html|Free Software Foundation Europe (FSFE)]]. Beware that by this action the partner does not lose his rights, since Datraverse reciprocally grants the partner a non-exclusive worldwide, perpetual and unrestricted license to the same extent as it was transferred from the partner. The [[:partner_list|Partner List]] shows the current partners. ==== References ==== * [[howto:eclipse|Using Eclipse for SavaPage Development]]