"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7146],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),l=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(u.Provider,{value:t},e.children)},s="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=l(r),f=o,y=s["".concat(u,".").concat(f)]||s[f]||m[f]||i;return r?n.createElement(y,a(a({ref:t},p),{},{components:r})):n.createElement(y,a({ref:t},p))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c[s]="string"==typeof e?e:o,a[1]=c;for(var l=2;l<i;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},655:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>l,toc:()=>p});var n=r(7462),o=r(3366),i=(r(7294),r(3905)),a=["components"],c={title:"Druid Contributor License Agreement",layout:"simple_page",canonical:"https://druid.apache.org/community/cla"},u="Druid Contributor License Agreement",l={type:"mdx",permalink:"/community/cla",source:"@site/src/pages/community/cla.md",title:"Druid Contributor License Agreement",description:"Per Apache policy, all Druid committers are required to have a contributor license agreement (CLA) on file with",frontMatter:{title:"Druid Contributor License Agreement",layout:"simple_page",canonical:"https://druid.apache.org/community/cla"}},p=[],s={toc:p},m="wrapper";function f(e){var t=e.components,r=(0,o.Z)(e,a);return(0,i.kt)(m,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"druid-contributor-license-agreement"},"Druid Contributor License Agreement"),(0,i.kt)("p",null,"Per Apache policy, all Druid committers are required to have a contributor license agreement (CLA) on file with\nthe Apache Software Foundation."),(0,i.kt)("p",null,"Other contributors are free to submit patches without having a CLA on file. You should only submit patches to the\nproject when you intend to license your contribution under the Apache 2.0 license, and have the legal right to do so."))}f.isMDXComponent=!0}}]);