{"id":4958,"date":"2024-04-04T07:00:00","date_gmt":"2024-04-04T05:00:00","guid":{"rendered":"https:\/\/neogeo.fr\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/"},"modified":"2026-10-23T16:26:28","modified_gmt":"2026-10-23T14:26:28","slug":"is-your-application-compatible-with-the-affero-gpl-3-0-licence","status":"publish","type":"post","link":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/","title":{"rendered":"Is your application compatible with the Affero GPL 3.0 licence?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">When changing the licence for OneGeo Suite, it is important to review dependency compatibility with the Affero GPL. Given the implications, is it also possible to ensure that our dependencies still have a compliant licence?  <\/p>\n\n<h2 class=\"wp-block-heading\">Licence compatibility <\/h2>\n\n<p class=\"wp-block-paragraph\">Licence compatibility includes two key elements to consider: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>The project itself (e.g., a Python module, a function library, etc.); <\/li>\n\n\n\n<li>A derivative work (e.g., a complete piece of software such as Firefox). Derivative works of a project may be modifications to the project\u2019s code or products that incorporate the project.  <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Licence compatibility is possible when the derivative work has a licence that does not violate the rules of the project\u2019s licence. <\/p>\n\n<p class=\"wp-block-paragraph\">\u201cCopyleft\u201d licences require derivative works to be redistributed under the same licence (or a compatible one) to protect the freedoms of the code and the user. Conversely, permissive licences allow relicensing, and it is also possible to create a proprietary product by integrating components under this type of licence. For example, Sony bases the PlayStation\u2019s proprietary operating system on FreeBSD, which is free software under the FreeBSD licence. <\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"718\" class=\"wp-image-1183\" src=\"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/03\/open_licenses-1024x718.png\" alt=\"\" srcset=\"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/03\/open_licenses-1024x718.png 1024w, https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/03\/open_licenses-300x210.png 300w, https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/03\/open_licenses-768x539.png 768w, https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/03\/open_licenses.png 1466w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\n<figcaption class=\"wp-element-caption\">S<em>ource: https:\/\/janelia-flyem.github.io\/licenses.html (Creative Commons BY-SA-3.0<\/em>) <\/figcaption>\n<\/figure>\n\n<p class=\"wp-block-paragraph\">In this diagram, public-domain code can be integrated into an MIT-licensed product, which can itself be integrated into a BSD-licensed product, which can itself be integrated into an Apache 2.0-licensed product, and so on up to the Affero GPL 3 licence. <\/p>\n\n<p class=\"wp-block-paragraph\">Two additional categories are introduced by this diagram: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Weakly protective: it implies that a modification to the code must be under the same licence (and therefore remain free). However, the project can be integrated into a product under another licence (even proprietary).  <\/li>\n\n\n\n<li>Network Protective: the GPL protects users of the machine. In client-server applications, the server side protects the server user, i.e., the system administrator. GPL compliance exists when the OneGeo Suite system administrator has access to the modified source code of the product, but the user of the client side does not. Network Protective licences also make it possible to protect the freedom of client users.    <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Pay close attention to licence versions: for example, the Apache 2.0 licence is compatible with the LGPL licence, whereas version 1.1 is not. <\/p>\n\n<p class=\"wp-block-paragraph\">To guide you, here are a few incompatibilities worth highlighting: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Apache 1.1 or MPL 1.1 (Mozilla Public Licence) are not compatible with GPL licences, whereas an explicit compatibility clause exists in version 2.0 of those same licences; <\/li>\n\n\n\n<li>CC-BY-3.0 prevents changing the licence, so it cannot be changed to AGPL. Version 4.0 explicitly allows changing the licence to GPL 3.0 and therefore to AGPL 3.0;  <\/li>\n\n\n\n<li>Original BSD licence: it required including a copyright notice in the documentation of the final product, which can be problematic when a product contains many components under this licence. <\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Check compliance<\/h2>\n\n<p class=\"wp-block-paragraph\">In practice, licence compliance can be checked using DevOps. <\/p>\n\n<p class=\"wp-block-paragraph\">To illustrate our projects, mainly in Python and JavaScript, we present two simple tools that can help you. In these examples, we will use them from the command line to compare dependency licences against an approved list of licences. <\/p>\n\n<h3 class=\"wp-block-heading\"><strong>Checking licences in Python<\/strong> <\/h3>\n\n<p class=\"wp-block-paragraph\">The \u201cpylic\u201d tool analyses all Python modules installed in the virtual environment and compares their licences with a section of pyproject.toml. If it finds a module with an unapproved licence, it exits with an error that can be used in CI.  <\/p>\n\n<p class=\"wp-block-paragraph\">Let us start by installing the program: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ pip install pylic\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Next, we tell \u201cpylic\u201d which licences are compatible with our software by providing it with a list of AGPL 3.0-compatible licences in the tool.pylic section of our pyproject.toml: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ cat &lt;&lt; EOF &gt;&gt; pyproject.toml\u202f\n[tool.pylic]\u202f\u00a0\nsafe_licenses = [\u202f\u00a0\n&quot;Apache Software License&quot;,\u00a0\n&quot;BSD License&quot;,\u202f\u00a0\n&quot;BSD&quot;,\u202f\u00a0\u00a0\n&quot;MIT License&quot;,\u202f\u00a0\n&quot;MIT&quot;,\u202f\u00a0\u00a0\n&quot;Mozilla Public License 2.0 (MPL 2.0)&quot;,\u202f\n&quot;GNU Library or Lesser General Public License (LGPL)&quot;,\u202f\n&quot;GNU Lesser General Public License v3 or later (LGPLv3+)&quot;,\u202f\u00a0\n\u202f\u00a0&quot;Python Software Foundation License&quot;,\u202f\u00a0\n&quot;Historical Permission Notice and Disclaimer (HPND)&quot;\u202f\u00a0\n\u202f\u00a0]\u202f\u00a0\nEOF\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">You will notice that these licences sometimes have very similar names. Indeed, \u201cpylic\u201d  <s> <\/s>relies on the name declared by the Python module maintainer (in setup.cfg\/setup.py, etc.), which is not standardised. We must declare both identifiers \u201cMIT\u201d and \u201cMIT License\u201d as \u201csafe\u201d, whereas we could have used SPDX licence identifiers in the Python module configuration.  <\/p>\n\n<p class=\"wp-block-paragraph\">Let us go back to \u201cpylic\u201d and run a check: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ pylic check\u202f\u00a0\n\u2728 All licenses ok \u2728\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">What can be done in the event of non-compliance? <\/p>\n\n<p class=\"wp-block-paragraph\">By commenting out the \u201cApache Software License\u201d entry in pyproject.toml, we get this message: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ pylic check\u202f\u00a0\nFound unsafe licenses:\u202f\n\u202f nltk (3.8.1): Apache Software License\u202f\u00a0\n\u202f phonenumbers (8.13.8): Apache Software License\u202f\u00a0\n\u202f importlib-metadata (6.1.0): Apache Software License\n\u202f bleach (6.0.0): Apache Software License\u202f\u00a0\n\u202f cryptography (42.0.1): Apache Software License\u202f\u00a0\n\u202f regex (2023.12.25): Apache Software License\u202f\n\u202f django-onegeo-suite (1.0.2): Apache Software License\u202f\n\u202f requests (2.31.0): Apache Software License\u202f\u00a0\n\u202f packaging (23.2): Apache Software License\u202f\n\u202f pyOpenSSL (24.0.0): Apache Software License\u202f\n\u202f tzdata (2023.4): Apache Software License\u202f\u00a0\n\u202f elasticsearch (7.17.9): Apache Software License\u202f\n\u202f async-timeout (4.0.3): Apache Software License\u202f\n\u202f josepy (1.14.0): Apache Software License\u202f\u00a0\n\u202f django-onegeo-rproxy-mapstore2 (1.0.0b2): Apache Software License\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Quite simple, is it not? <\/p>\n\n<p class=\"wp-block-paragraph\">\u00a0<\/p>\n\n<h3 class=\"wp-block-heading\"><strong>Checking licences in JavaScript<\/strong> <\/h3>\n\n<p class=\"wp-block-paragraph\">Similarly, you can check the licences of JavaScript projects with license-checker. <s>It<\/s>It is still not aware of existing licences, so you will need to build the list manually. <\/p>\n\n<p class=\"wp-block-paragraph\">Usage is fairly straightforward: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ npx license-checker --onlyAllow &quot;CC-BY-4.0;ISC;Apache-2.0;BSD-3-Clause;Custom: https:\/\/github.com\/tmcw\/jsonlint;BSD-2-Clause;Unlicense;UNLICENSED;BSD;Public Domain;CC0-1.0;MPL-2.0&quot; --production\u202f\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\"><strong>Package &#8220;@fortawesome\/fontawesome-common-types@0.2.36&#8221; is licensed under &#8220;MIT&#8221; which is not permitted by the &#8211;onlyAllow flag. <\/strong><strong>Exiting.<\/strong>\u202f <\/p>\n\n<p class=\"wp-block-paragraph\">You get errors for each unauthorised licence. <\/p>\n\n<p class=\"wp-block-paragraph\">The \u201c&#8211;onlyAllow\u201d option lists the allowed licences separated by semicolons (\u201c;\u201d). The \u201c&#8211;production\u201d option excludes licences for modules in the \u201cdevDependencies\u201d section of package.json. <\/p>\n\n<p class=\"wp-block-paragraph\">Also remember to correct the \u201clicense\u201d section of package.json so as not to confuse the tool: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">\u202f &quot;license&quot;: &quot;AGPL-3.0-only&quot;,\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">I also recommend adding a script to package.json to automate the checks: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">cat package.json\u202f\u202f\n{\u202f\u00a0\n[...]\u202f\u00a0\n\u202f &quot;scripts&quot;: {\u202f\n[...]\u202f\u202f\u202f &quot;lint&quot;: &quot;vue-cli-service lint&quot;,\u202f\u00a0\n\u202f\u202f\u202f &quot;license-checker&quot;: &quot;license-checker --onlyAllow \\&quot;MIT;CC-BY-4.0;ISC;Apache-2.0;BSD-3-Clause;Custom: https:\/\/github.com\/tmcw\/jsonlint;BSD-2-Clause;Unlicense;UNLICENSED;BSD;Public Domain;CC0-1.0;MPL-2.0\\&quot; --production&quot;\n\u202f },\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">You can then run simply: <\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">$ npm run\u202f license-checker\u202f\u00a0<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">\u00a0<\/p>\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong> <\/h2>\n\n<p class=\"wp-block-paragraph\">There are probably more sophisticated tools for checking the licence compatibility of external libraries used by your project, notably by using the OSADL licence compatibility matrix: <a href=\"https:\/\/www.osadl.org\/html\/CompatMatrix.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.osadl.org\/html\/CompatMatrix.html<\/a> <\/p>\n\n<p class=\"wp-block-paragraph\">However, for a lightweight and quick use in CI, these two tools will do the job, while still investing a bit of time to review any new licences that may appear over the lifetime of your project. <\/p>\n\n<h3 class=\"wp-block-heading\"><strong>Sources:<\/strong> <\/h3>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/janelia-flyem.github.io\/licenses.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/janelia-flyem.github.io\/licenses.html<\/a>: compatibility image <\/p>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.gnu.org\/licenses\/license-list.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.gnu.org\/licenses\/license-list.html<\/a>: information on GPL compatibility <\/p>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.apache.org\/licenses\/GPL-compatibility.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.apache.org\/licenses\/GPL-compatibility.html<\/a>: Apache 2.0 and GPL compatibility <\/p>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/medium.com\/@iharmandeep\/easily-check-licenses-of-your-npm-dependencies-in-your-ci-pipeline-9102150d6907\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/medium.com\/@iharmandeep\/easily-check-licenses-of-your-npm-dependencies-in-your-ci-pipeline-9102150d6907<\/a>: using license-checker <\/p>\n\n<p class=\"wp-block-paragraph\">\u00a0<\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>Author: S\u00e9bastien DA ROCHA <\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When changing the licence for OneGeo Suite, it is important to review dependency compatibility with the Affero GPL. Given the implications, is it also possible to ensure that our dependencies still have a compliant licence? Licence compatibility Licence compatibility includes two key elements to consider: Licence compatibility is possible when the derivative work has a &#8230; <a title=\"Is your application compatible with the Affero GPL 3.0 licence?\" class=\"read-more\" href=\"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/\" aria-label=\"Read more about Is your application compatible with the Affero GPL 3.0 licence?\">Read more<\/a><\/p>\n","protected":false},"author":5,"featured_media":4959,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,60],"tags":[],"class_list":["post-4958","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-products","category-uncategorized-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Are your dependencies AGPL 3.0-compatible? | NEOGEO<\/title>\n<meta name=\"description\" content=\"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Are your dependencies AGPL 3.0-compatible? | NEOGEO\" \/>\n<meta property=\"og:description\" content=\"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/\" \/>\n<meta property=\"og:site_name\" content=\"NEOGEO\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-04T05:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-23T14:26:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1352\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Philippe DESTR\u00c9\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philippe DESTR\u00c9\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/\"},\"author\":{\"name\":\"Philippe DESTR\u00c9\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#\\\/schema\\\/person\\\/69685e84302b110f77d59dc8ee6e2d40\"},\"headline\":\"Is your application compatible with the Affero GPL 3.0 licence?\",\"datePublished\":\"2024-04-04T05:00:00+00:00\",\"dateModified\":\"2026-10-23T14:26:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/\"},\"wordCount\":917,\"publisher\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/20943502-Copie-scaled-1.jpg\",\"articleSection\":[\"Products\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/\",\"url\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/\",\"name\":\"Are your dependencies AGPL 3.0-compatible? | NEOGEO\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/20943502-Copie-scaled-1.jpg\",\"datePublished\":\"2024-04-04T05:00:00+00:00\",\"dateModified\":\"2026-10-23T14:26:28+00:00\",\"description\":\"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#primaryimage\",\"url\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/20943502-Copie-scaled-1.jpg\",\"contentUrl\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/20943502-Copie-scaled-1.jpg\",\"width\":2560,\"height\":1352,\"caption\":\"Coding and website development. Technical support. Programming engineering. Coder, web developer, computer software. Programmer male flat character. Vector isolated concept metaphor illustration\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Is your application compatible with the Affero GPL 3.0 licence?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/\",\"name\":\"NEOGEO\",\"description\":\"Optimisez,\u00a0valorisez,\\u2028partagez\u00a0vos\u00a0donn\u00e9es\u00a0spatiales\",\"publisher\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#organization\",\"name\":\"NEOGEO\",\"url\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/NEOGEO-LOGO.svg\",\"contentUrl\":\"https:\\\/\\\/neogeo.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/NEOGEO-LOGO.svg\",\"width\":145,\"height\":42,\"caption\":\"NEOGEO\"},\"image\":{\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/#\\\/schema\\\/person\\\/69685e84302b110f77d59dc8ee6e2d40\",\"name\":\"Philippe DESTR\u00c9\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g\",\"caption\":\"Philippe DESTR\u00c9\"},\"url\":\"https:\\\/\\\/neogeo.fr\\\/en\\\/author\\\/pdestreneogeo\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Are your dependencies AGPL 3.0-compatible? | NEOGEO","description":"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/","og_locale":"en_US","og_type":"article","og_title":"Are your dependencies AGPL 3.0-compatible? | NEOGEO","og_description":"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.","og_url":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/","og_site_name":"NEOGEO","article_published_time":"2024-04-04T05:00:00+00:00","article_modified_time":"2026-10-23T14:26:28+00:00","og_image":[{"width":2560,"height":1352,"url":"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg","type":"image\/jpeg"}],"author":"Philippe DESTR\u00c9","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Philippe DESTR\u00c9","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#article","isPartOf":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/"},"author":{"name":"Philippe DESTR\u00c9","@id":"https:\/\/neogeo.fr\/en\/#\/schema\/person\/69685e84302b110f77d59dc8ee6e2d40"},"headline":"Is your application compatible with the Affero GPL 3.0 licence?","datePublished":"2024-04-04T05:00:00+00:00","dateModified":"2026-10-23T14:26:28+00:00","mainEntityOfPage":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/"},"wordCount":917,"publisher":{"@id":"https:\/\/neogeo.fr\/en\/#organization"},"image":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#primaryimage"},"thumbnailUrl":"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg","articleSection":["Products"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/","url":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/","name":"Are your dependencies AGPL 3.0-compatible? | NEOGEO","isPartOf":{"@id":"https:\/\/neogeo.fr\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#primaryimage"},"image":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#primaryimage"},"thumbnailUrl":"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg","datePublished":"2024-04-04T05:00:00+00:00","dateModified":"2026-10-23T14:26:28+00:00","description":"Copyleft, permissive, network protective: check your dependencies\u2019 compatibility with AGPL 3.0 in CI using pylic and license-checker.","breadcrumb":{"@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#primaryimage","url":"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg","contentUrl":"https:\/\/neogeo.fr\/wp-content\/uploads\/2024\/04\/20943502-Copie-scaled-1.jpg","width":2560,"height":1352,"caption":"Coding and website development. Technical support. Programming engineering. Coder, web developer, computer software. Programmer male flat character. Vector isolated concept metaphor illustration"},{"@type":"BreadcrumbList","@id":"https:\/\/neogeo.fr\/en\/is-your-application-compatible-with-the-affero-gpl-3-0-licence\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/neogeo.fr\/en\/"},{"@type":"ListItem","position":2,"name":"Is your application compatible with the Affero GPL 3.0 licence?"}]},{"@type":"WebSite","@id":"https:\/\/neogeo.fr\/en\/#website","url":"https:\/\/neogeo.fr\/en\/","name":"NEOGEO","description":"Optimisez,\u00a0valorisez,\u2028partagez\u00a0vos\u00a0donn\u00e9es\u00a0spatiales","publisher":{"@id":"https:\/\/neogeo.fr\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/neogeo.fr\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/neogeo.fr\/en\/#organization","name":"NEOGEO","url":"https:\/\/neogeo.fr\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/neogeo.fr\/en\/#\/schema\/logo\/image\/","url":"https:\/\/neogeo.fr\/wp-content\/uploads\/2026\/06\/NEOGEO-LOGO.svg","contentUrl":"https:\/\/neogeo.fr\/wp-content\/uploads\/2026\/06\/NEOGEO-LOGO.svg","width":145,"height":42,"caption":"NEOGEO"},"image":{"@id":"https:\/\/neogeo.fr\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/neogeo.fr\/en\/#\/schema\/person\/69685e84302b110f77d59dc8ee6e2d40","name":"Philippe DESTR\u00c9","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b366889cd846213d38b977f63dd60b6af7e9ed5b067a024a76fe0865155ef9db?s=96&d=mm&r=g","caption":"Philippe DESTR\u00c9"},"url":"https:\/\/neogeo.fr\/en\/author\/pdestreneogeo\/"}]}},"_links":{"self":[{"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/posts\/4958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/comments?post=4958"}],"version-history":[{"count":1,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/posts\/4958\/revisions"}],"predecessor-version":[{"id":4960,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/posts\/4958\/revisions\/4960"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/media\/4959"}],"wp:attachment":[{"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/media?parent=4958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/categories?post=4958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/neogeo.fr\/en\/wp-json\/wp\/v2\/tags?post=4958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}