<p id="the-many-benefits-of-open-source-contributors">Making the decision to open source your software is not an easy process. Indeed, here at ArrayFire our choice to <a href="https://github.com/arrayfire/arrayfire">release ArrayFire</a> under the open source, commercially friendly, BSD 3-Clause License came only after many hours of consideration and philosophical discussion (e.g. see our <a href="http://notonlyluck.com/2014/07/31/the-decision-to-open-source-arrayfire/">CEO's blog on these topics</a>). Thus far this decision has proven to be strictly beneficial to our company.</p>

<h3 id="the-impact-of-third-party-contributions">The impact of third-party contributions</h3>
Although ArrayFire is primarily developed by our engineers, there are several <a href="https://github.com/arrayfire/arrayfire/graphs/contributors">contributions from other</a> developers. Therefore we feel particularly compelled to elucidate how these contributions have improved the ArrayFire ecosystem.
<h4>Packaging for Linux and OSX</h4>
One of the best parts of open source distribution is that your code can be packaged and distributed for a wide variety of operating systems. We already <a href="http://sandbox.arrayfire.com/download">distribute binary installers</a> for Windows, OSX, and Linux that use the MKL library (and hence perform better than pure from-source builds), but a few users have taken up the task of packaging ArrayFire for their favorite operating systems. In particular, <a href="https://github.com/ghisvail">Ghislain Antony Vaillant</a> created Debian packages for <a href="https://github.com/clMathLibraries/clFFT">clFFT</a>, <a href="https://github.com/clMathLibraries/clBLAS">clBLAS</a>, and <a href="https://ftp-master.debian.org/new/arrayfire_3.0.1-1.html">recently added</a> ArrayFire's CPU backend. After clFFT and clBLAS are accepted his intention is to also package and submit our OpenCL backend to the Debian package repository. Around the same time <a href="https://github.com/hmalphettes">Hugues Malphettes</a> created a Homebrew Formula for <a href="https://github.com/sutoiku/homebrew-arrayfire">installing ArrayFire on OSX from source</a>. Not to be left out of the packaging fun, our own <a href="https://github.com/pavanky">Pavan Yalamanchili</a> recently assumed the role as maintainer for the <a href="https://aur.archlinux.org/packages/arrayfire-git/">ArrayFire Arch Linux package</a>
<h4 id="arrayfire-js">ArrayFire.js</h4>
Among the most fundamental third party contributions is the creation of Node.js bindings for ArrayFire by <a href="https://github.com/unbornchikken">Gábor Mező</a>. Gábor has previously created bindings for (<a href="https://github.com/unbornchikken/NOOOCL">NOOCL</a>) CMake (<a href="https://github.com/unbornchikken/cmake-js">CMake.js</a>) and made several contributions to the Foreign Function Interface for Node, <a href="https://github.com/node-ffi/node-ffi">node-ffi</a>. In less than a month Gábor created the bindings and contributed it to our GitHub organization. This new <a href="https://github.com/arrayfire/arrayfire_js">ArrayFire.js</a> library lets you use the power of ArrayFire asyncronously from Javascript. We will write more about this project in the future.
<h4 id="improving-the-code">Improving the code</h4>
Very early on we received input from several developers on how we might improve our CMake build system. <a href="https://github.com/glehmann">Gaëtan Lehmann</a> added <a href="http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file">CMake project configuration files</a>. which automatically create the equivilant of CMake find scripts. This let us remove our (manually maintained) <code>FindArrayFire.cmake</code> script. Gaëtan also wins the award for squelching the most compiler warnings by cleaning up 1000+ unused function warnings issued by clang by <a href="https://github.com/arrayfire/arrayfire/commit/7084517cf72d9271076d17547e50fa7ae8b55370">adding two lines of code</a>. Similarly, <a href="https://github.com/nathanjackson">Nathan Jackson</a> discovered and fixed a race condition in a reduction kernel, and added several tests for complex values and <a href="https://github.com/FilipeMaia">Filipe Maia</a> added support for <code>s64</code> and <code>u64 </code>datatypes by contributing six lines of code and fixed missing definitions for some proxy operators.
<h3 id="how-can-you-help-">How can you help?</h3>
Like many open source projects, there are many ways to contribute to the ArrayFire library:
<h4 id="reporting-issues">Reporting issues</h4>
The most fundamental way you can contribute is to use our library and help us find problems and suggest methods by which the library may be improved. Using the <a href="https://github.com/arrayfire/arrayfire/issues">ArrayFire GitHub issue tracker</a> you may
<ul>
	<li>make requests for new features</li>
	<li>suggest performance improvements</li>
	<li>report build issues</li>
	<li>file bug reports</li>
	<li>and report on new hardware/backend support status.</li>
</ul>
Be sure to read the <a href="https://github.com/arrayfire/arrayfire/blob/master/CONTRIBUTING.md">contributing guidelines</a> prior to submitting a pull request.
<h4 id="documentation-usage-examples-and-community-help">Documentation, usage examples, and community help</h4>
If you are using ArrayFire and find someplace where you think our <a href="http://sandbox.arrayfire.com/docs/">documentation</a> could be improved or want to create a <a href="http://sandbox.arrayfire.com/docs/examples.htm">new example</a> we would be happy to hear from you. You may submit these improvements through either the <a href="https://github.com/arrayfire/arrayfire/issues">ArrayFire GitHub issue tracker</a> or send us a message on the <a href="https://groups.google.com/forum/#!forum/arrayfire-users">ArrayFire Google Group</a>
<h4 id="whitepapers">Whitepapers</h4>
If you have found ArrayFire particularly useful in your field or want to exemplify how ArrayFire has improved your software, considering writing a whitepaper with us! We have written whitepapers on topics ranging low-level memory optimizations for HPC applications to the impact of ArrayFire's matrix multiplication abilities on high-level language wrappers. We have skilled writers on hand who will work with you to develop a great technical publication. Contact either <a href="mailto:sales@arrayfire.com">sales@arrayfire.com</a> or <a href="mailto:technical@arrayfire.com">technical@arayfire.com</a> to get started.
<h4 id="social-media">Social media</h4>
Help spread the word about ArrayFire by following <a href="https://twitter.com/arrayfire">@arrayfire</a> on Twitter, and <a href="https://plus.google.com/+Arrayfire">ArrayFire</a> on Google Plus. You can also collect some <em>sweet, sweet karma</em> by posting our blogs and progress updates on the <a href="http://reddit.com/r/OpenCL">/r/OpenCL</a>, <a href="http://reddit.com/r/CUDA">/r/CUDA</a>, <a href="http://reddit.com/r/cpp">/r/cpp</a> and <a href="http://reddit.com/r/programming">/r/programming</a> subreddits and <a href="https://news.ycombinator.com/">HackerNews</a>
<h4 id="directly-fund-arrayfire-development">Directly fund ArrayFire development</h4>
Lastly, if you are a researcher who uses ArrayFire in your work consider writing ArrayFire in as a subcontractor on your next grant. Similarly, if you love ArrayFire but need some additional functionality fast, consider hiring ArrayFire to write the code for you. We offer a full range of <a href="http://sandbox.arrayfire.com/consulting/">consulting</a>, <a href="http://sandbox.arrayfire.com/support/">support</a>, and OpenCL/CUDA/ArrayFire <a href="http://sandbox.arrayfire.com/training/">training</a> options that fit almost any budget.
<h3 id="conclusion">Conclusion</h3>
One of the most overlooked benefits of making a project open source are contributions from third parties. Since ArrayFire was open sourced in November 2014 we have already received have been quite substantial. We have third-parties packaging our software for OSX and various Linux distributions, creating wrappers so ArrayFire maybe used in other languages, and many code changes that have improved our build process and code reliability. Even a person does not feel comfortable writing code for the ArrayFire library core, they may also contribute by reporting issues, improving our documentation, answering questions on our Google Group page, collaborating with ArrayFire LLC to write whitepapers, talking about us on social media, and even directly funding development of the library through ArrayFire's <a href="http://sandbox.arrayfire.com/consulting/">consulting</a>, <a href="http://sandbox.arrayfire.com/support/">support</a>, and OpenCL/CUDA/ArrayFire <a href="http://sandbox.arrayfire.com/training/">training</a> services.