The GNU GPL Virus

If you are just an average Joe who just wishes to use GNU GPL (General Public License) licensed software, you have nothing to worry about. However, if you are a developer, stay far far away from any software licensed under the GNU GPL.

Let’s say you are developing a video game that you may wish to sell for a profit some day. You have your game up and running great, but you want to make it much more realistic by adding dynamic physics, like you see in games such as Half-Life 2. After researching, you find a great physics library you want to use so you don’t have to spend months learning physics to write your own. Unfortunately, the physics library’s license is the dreaded GNU GPL. If you were to integrate the physics library into your application, all of the source code that you have written all by yourself is suddenly GLP-ed and you MUST release the source code for free! Like a virus, the GNU GPL spreads across all code attached to anything licensed under the GPL! You can still sell your game of course, but anyone who wishes to get it for free can do so by downloading your game’s source code that you were required to freely release, compiling it, and running it themselves. Obviously, this results in a loss of sales.

Don’t get me wrong, there’s nothing wrong with releasing your source code. Perhaps you wish to sell your application for a few years, then release the source code for free when it gets old and sales decline or stop all together – much like id software did with Quake and Doom.

Not all off the GNU licenses are bad though, just stay away from specifically the “GPLv2,” “GPLv3,” and so on. Two specific variants, the LGPL and the GPL+CE, are fine to use.

The LGPL is merely OK because it allows you to dynamically link (not statically) a library licensed under the LGPL and not have to release your source code. However, it allows anyone to legally reverse-engineer your software for “debugging and such modifications.” The LGPL is unsuitable for mobile devices such as the iPhone where you must statically link everything together into one single binary. If you are just targeting desktop computers where you are able to get away with dynamically linking the LGPL library, and you don’t care about hackers legally reverse-engineering your software, the LGPL is OK.

Probably the best GPL-ed software is going to be licensed under the GPL + Classpath Exception. This version of the GPL adds a special exception clause which allows linking (static or dynamic) to the library and releasing the combined application under your own licensing terms. This means you can simply use the free library in your project without having to worry about your software having “GPL compatible licensing” or releasing your source code for free. This is exactly how it should be, you shouldn’t have to hire a lawyer to use software that is supposedly “free” and “open-source” in your application! You absolutely shouldn’t be forced to abide by someone else’s terms for simply using a LIBRARY in YOUR application!

In conclusion, if you are a developer, unless it’s licensed under the GPL+CE do NOT use GPL-ed software in your project! The GNU GPL is a virus to your project in it’s entirety and is considered to be “free as in speech” rather than “free as in beer.” To me, free should mean free, not freedom; as they are two completely different terms. I personally only choose to use libraries and other software in my projects that are licensed under the MIT, BSD, zlib, or other similarly styled licenses.

NetBeans CMake Setup macOS

To make Apache NetBeans cooperate with CMake projects on your Mac it requires just a few extra steps. CMake used to have a tool to do this for you, but now navigating in CMake to Tools->How to Install for Command Line Use shows you this:

I’m going to chose the symlink option, open up the Terminal App and type:

sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install

Now that CMake is properly installed to the command line tool chain, open up NetBeans and go to the Preferences and click on the C/C++ tab. Enter the newly created symlink path /usr/local/bin/cmake for the CMake Command and click apply:

Now navigate to File->New Project. Choose C/C++ Project with Existing Sources and click next:

Browse to find your project root directory containing the CMakeLists.txt file, and everything should be good to go, just click finish!

NetBeans should run CMake to generate the Makefile, and should you edit your CMakeLists.txt file, just right-click the CMakeLists.txt file in the project tree and select Generate Makefile to generate a fresh one. All done and good to go! Happy coding!

Apache NetBeans C/C++ Setup macOS

If you’re weird like me, you don’t really like using Xcode to program C/C++ on your Mac. If you haven’t already done so, setup the command line tools since macOS does not come with them pre-installed. NetBeans is typically used for Java programming, and is written in Java, therefore you need the Java Development Kit (JDK) installed to run it. Recently, Oracle has introduced a new versioning scheme and licensing which at first glance can seem very confusing and overwhelming. To sum it up, unless you are a large corporation or development studio that requires paid commercial support, just download OpenJDK. Any OpenJDK 8+ (including the official Oracle OpenJDK) will work, but the easiest and most painless route is downloading AdoptOpenJDK which installs binaries exactly where they need to go. Personally, I chose the package containing OpenJDK 13 with HotSpot, but any combination works just fine for our purposes.

Anyway, once you have the command line tools, OpenJDK, and finally NetBeans installed, run the Apache NetBeans 11.2 application. Navigate to Tools->Plugins and you will notice there is no longer a C/C++ plugin under the Available Plugins tab in the new Apache version!

Click on the Settings tab and check the box next to NetBeans 8.2 Plugin Portal to activate the old plugins:

Then go to the Updates tab, click on Check for Updates and then press Update:

You will notice the number of Available Plugins has increased! Go ahead and install the C/C++ plugin!

Restart the IDE after the installation is complete and start coding in good old fashioned C/C++ using Apache NetBeans!

Darcula LAF

If you would like this nice IntelliJ IDEA and Eclipse IDE style dark theme to go along with your Catalina Dark Mode you can download the Darcula LAF plugin. To install go back to Tools->Plugins, click on the Downloaded tab and press Add Plugins. Find your downloaded Darcula plugin and install!

NetBeans is currently my go-to IDE for C/C++ and PHP projects, since I have been using it for many many years and have had zero problems! Next week I begin Java classes for school… I will try out Eclipse and IntelliJ IDEA to see how they compare for Java programming and report back. If you don’t know the differences I will sum it up: NetBeans is the official Java IDE which was recently taken over by Apache (previously owned/developed by Sun – the creators of Java,) Eclipse is the most commonly used Java IDE, and IntelliJ IDEA has both paid and free versions which was used as the basis for Android Studio. Alternatively, for C/C++ projects I enjoy coding the old fashioned way with Sublime Text for my text editor and CMake for cross platform makefile generation. For using CMake with NetBeans see this article.

C/C++ Programming Setup on macOS 10.15 Catalina

Unfortunately, macOS does not come with development tools pre-installed like on Linux, BSD, and other *nix systems. Luckily, it’s simple and easy to do. Open up the Terminal application (Applications/Utilities/Terminal.app) and type:

xcode-select --install

This installs all of the standard command line tools you should be used to, since it’s no longer an option to do so inside of the Xcode IDE. Speaking of which, you no longer need an Apple Developer account to install Xcode. Simply open up the App Store application, search for, and install Xcode:

All done, start programming away!