Bossie Awards 2014: The best open source application development tools
InfoWorld's picks of the year among languages, frameworks, libraries, and all the other tools that programmers use
The best open source development tools
Are developers never satisfied? Newfangled editors, brushed-up IDEs, JavaScript frameworks, JavaScript improvers, Node.js, Node.js frameworks, task runners, test automation tools, PaaS solutions, better places to stick your source code, new programming languages on the rise, and old programming languages with new tricks -- you'll find all that and more in this year's Bossies.
D3
D3 (Data-Driven Documents) is a tool for data visualization in Web documents. It allows you to bind arbitrary data to a Document Object Model, then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or you can use the same data to create an interactive SVG bar chart with smooth transitions and interaction.
-- Martin Heller
Famo.us
Famo.us is the only JavaScript framework that includes an open source 3D layout engine fully integrated with a 3D physics animation engine that can render to DOM, Canvas, or WebGL (see the InfoWorld review). The tools you need to build Famo.us apps and sites will always be free and available to everyone, and integrations between Famo.us and Angular, Backbone, Cordova, and jQuery are well under way.
Famo.us uses Node.js and Grunt in its tooling. A well-written Famo.us iOS or Android app can perform as well as a native app, while being much easier and faster to develop. In addition to the framework and tools, Famo.us provides free training through interactive online lessons, branded as Famo.us University.
-- Martin Heller
jQuery
jQuery Core is a fast, small, feature-rich JavaScript library that simplifies HTML document traversal and manipulation, event handling, animation, and Ajax. jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the Core. jQuery Mobile is a unified, HTML5-based user interface system for all popular mobile device platforms, built on the Core and jQuery UI. Its lightweight code is built with progressive enhancement, which increases its portability at the expense of limiting how much native look and feel it can provide.
-- Martin Heller
Atom
Atom is an open source, hackable desktop editor from GitHub that's based on Web technologies and is full-featured out of the box. It includes a fuzzy finder, fast project-wide search and replace, multiple cursors and selections, multiple panes, snippets, code folding, and the ability to import TextMate grammars and themes.
Out of the box, Atom displayed proper syntax highlighting for every programming language I tried it on, except for F# and C# -- and I fixed that by loading those packages from within Atom. Not surprisingly, Atom has tight integration with GitHub.
-- Martin Heller
Brackets
Brackets is an open source editor, originally from Adobe, for the next generation of the Web, and it's an effort to build better tooling for JavaScript, HTML, CSS, and related open Web technologies. Brackets itself is written in JavaScript, HTML, and CSS, and the developers use Brackets to build Brackets.
In addition to the built-in capabilities, Brackets has an extension manager, and extensions are available for many of the languages and tools that front-end developers use. Brackets features a clean UI, the ability to open a quick inline editor (displaying all the related CSS for some HTML or all the related JavaScript for some scripting), and a live preview for Web pages you're editing.
-- Martin Heller
Node.js
Node.js is a platform built on Chrome's V8 JavaScript runtime for easily building fast, scalable network applications. It uses an event-driven, nonblocking I/O model that makes it lightweight and efficient, compared to, say, Java Web Pages or ASP.Net. Node.js also lets developers make code asynchronous without dealing with threads and synchronization. It's is well suited for data-intensive, real-time applications that run across distributed devices.
Node.js is seeing a high adoption rate, often to replace older frameworks. LinkedIn swapped Ruby on Rails for Node.js, for example, and the enterprise mobile app platform FeedHenry was built around Node.js and relies on the 70,000 public modules in the Node.js ecosystem.
-- Martin Heller
Node-webkit
Node.js gave developers the power to write robust server-side and client-side software in JavaScript. Node-webkit expands on that promise: It uses Node.js as a back end and the WebKit browser engine as a front end to allow JavaScript programmers to create desktop applications by using the same programming expertise they'd use to create Web apps.
The interactions between Node-webkit apps and their host computer are constrained in many ways -- sometimes by necessity -- but the latest revisions add support for features that help to fill that gap, like desktop notifications and a full-screen mode.
-- Serdar Yegulalp
Hack and HHVM
Facebook was built on PHP, but PHP's limitations both as a language and as a runtime platform were a long-term thorn in the side of the company's engineering team. The group's response: to create both a new version of the language, Hack, and a new platform to run it on, the HHVM (HipHop Virtual Machine).
With HHVM, Hack and PHP are just-in-time compiled, first into byte code, then into machine code -- a process that Facebook claims delivers far greater acceleration than converting PHP to C++. Hack has been criticized for being so dependent on Facebook for its progress, but there's something to be said for a project that attempts to shed some of PHP's rightfully lambasted cruft.
-- Serdar Yegulalp
CoffeeScript
JavaScript is an easy language to dislike, which partly explains the proliferation of languages that compile down to JavaScript. CoffeeScript is one of the biggest names that could be pulled out of that particular hat.
Devised back in 2009 by Jeremy Ashkenas, it takes many cues from Ruby for its syntax and design. Loops, array handling, and lexical scoping are all made much less boilerplate and convoluted, and the use of ellipses ("splats") as a syntactical addition to the language lets you easily define functions that take arbitrary numbers of arguments. Many projects now use CoffeeScript as their source language.
-- Serdar Yegulalp
Less
Less (Leaner CSS) is a CSS pre-processor, meaning it extends the CSS language, adding features that allow variables, mix-ins, functions, and many other techniques that let you make CSS that is more maintainable, themable, and extendable. Less runs inside Node, in the browser, and inside Rhino. There are also many third-party tools, such as the Less plug-in for Grunt, that allow you to compile your files and watch for changes.
The main difference between Less and other CSS precompilers is that Less allows real-time compilation via Less.js by the browser. While this is convenient during development, it’s not a great idea for production. Less was influenced by Sass, and in turn influenced the SCSS syntax of Sass.
-- Martin Heller
Sass
Sass (Syntactically Awesome Style Sheets) is a style sheet language interpreted to CSS. It's completely compatible with all versions of CSS so that you can seamlessly use any available CSS libraries from Sass. Sass adds inheritance (@extend), variables, nesting, mix-ins, and math to CSS, making your stylesheets easier to write and maintain.
-- Martin Heller
Git
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. The feature that really makes Git stand apart from nearly every other SCM is its branching model, which enables frictionless context switching and easy, safe experimentation.
Git was initially designed and developed by Linus Torvalds for Linux kernel development in 2005 and has since become the most widely adopted version control system for software development.
-- Martin Heller
Mercurial
Mercurial may be best known as the distributed version control system that's easier to learn to use than Git. Mercurial also has great tools for interoperating with other formats. You can clone a Subversion or Git repository with Mercurial easily, and even push commits back. Mercurial has a lot of great extensions, including some for history rewriting such as Queues and Evolve. Bitbucket (now owned by Atlassian) offers solid Mercurial repository hosting with unlimited private repos.
-- Travis Wellman
GitLab
GitLab is a Ruby-based GitHub clone for on-premise deployment, competing with GitHub Enterprise but also offering an open source Community edition that runs on Linux. The Gitlabhq repo has more than 14,000 stars on GitHub, and people seem to like it better than Gitorius, the other open source GitHub clone. Several major organizations use GitLab, including Red Hat, O'Reilly, NASA, and Publicis. GitLab claims more than 100,000 organizations use it in total.
It runs on Debian- and Red Hat-derived Linux distros, and typically uses Ruby 2.0, Python 2.7, a MySQL database, and an Nginx Web server.
-- Martin Heller
Homebrew
Linux distros include command-line and graphical package managers to automate the process of installing, upgrading, configuring, and removing application software. These package managers rely on recipes for installation saved in a searchable repository, and vary with the particular distribution family.
Mac OS X has an official App Store, but no official package manager for Linux-like utilities. Unofficial OS X source code-level package managers include fink, MacPorts, pkgsrc, and my favorite, Homebrew, which is implemented in Ruby and Git and has nearly 3,000 formulae in its repository. Installing Homebrew is a simple matter of running the Ruby script from the home page in Bash; installing and managing packages is a simple matter of running Homebrew commands in Bash, e.g. $ brew install wget
.
-- Martin Heller
Appium
Appium is an open source test automation framework for use with native, mobile Web, and hybrid mobile apps. It uses Node.js and drives iOS and Android apps via the WebDriver JSON wire protocol. There are already Appium clients written in languages like Ruby, Python, Java, JavaScript, PHP, C#, and RobotFramework.
Appium is at its heart a Node.js Web server that exposes a REST API. It receives connections from a client, listens for commands, executes those commands on a mobile device, and responds with an HTTP response representing the result of the command execution. If you don't want to fuss with Node.js, you can install GUI-driven Appium servers on Windows and OS X.
-- Martin Heller
Dart
Dart is Google's class-based, single-inheritance, object-oriented language with C-style syntax. It supports interfaces, abstract classes, reified generics, and optional typing, with static type annotations that can provide documentation for tools like static checkers and dynamic runtime checks. The stated goal of Dart is "ultimately to replace JavaScript as the lingua franca of Web development on the open web platform." Meanwhile, Dart comes with its own Eclipse-based editor, a VM, the Dartium Web browser, and a Dart-to-JavaScript compiler.
Dart was recently accepted as an ECMA standard. That doesn't guarantee its success, of course. But Dart is useful for desktop and server apps as well as browser apps, and it produces faster and more robust code than JavaScript.
-- Martin Heller
Express
Express is a minimal and flexible Node.js Web application framework, providing a robust set of features for building single-page, multipage, and hybrid Web applications. The Express API deals with the Web application, HTTP requests and responses, routing, and middleware. As of Express 4.x, the supported middleware for Express resides in a number of separate repositories.
Several forks of Express and add-ons for Express have surfaced, including Locomotive and Koa. However, the Express project itself is still in active development.
-- Martin Heller
Backbone
Backbone.js is a lightweight open source JavaScript library with a RESTful JSON interface and an MVP (model-view-presenter) application pattern, created by Jeremy Ashkenas and maintained by Jeremy and the community. It depends on Underscore.js (also by Jeremy), and it's designed for developing single-page Web applications and for keeping various parts of Web applications synchronized.
Backbone.js doesn't have the heavyweight features of an AngularJS, but that's by design: It's a lighter-weight and simpler tool for bringing structure to your app.
-- Martin Heller
Koa
Koa is a new Web framework designed by the team behind Express. Koa aims to be a smaller, more expressive, and more robust foundation for Web applications and APIs. Koa uses generators for middleware rather than using Node.js callbacks. The code at left is a "hello, world" Koa application using a generator, which does a yield next
to pass control to the next generator.
-- Martin Heller
AngularJS
AngularJS is a lightweight open source JavaScript framework for building Web applications with HTML, JavaScript, and CSS, maintained by Google and the community. It offers powerful data binding, dependency injection, guidelines for structuring your app, and other useful features to make your Web app testable and maintainable.
AngularJS's most notable feature is its two-way data binding, which reduces the amount of code written by relieving the server back end from templating responsibilities. Instead, templates are rendered in plain HTML according to data contained in a scope defined in the model.
-- Martin Heller
OpenShift
OpenShift was designed to provide rapid self-service deployment of common languages, databases, Web frameworks, and applications. One of its current differentiators is that continuous integration (using Jenkins) is a standard part of its workflow; also, it automatically scales applications across nodes. It's useful for developers, devops, testing, and production deployment (see the InfoWorld review), and it can run in a public or private cloud, or on-premise.
Origin is the bleeding-edge, community-supported, free open source version. It's not intended for production environments, but it can provide a good, fast, free development environment that runs on a laptop or desktop. OpenShift is also available in online and enterprise versions from Red Hat.
-- Martin Heller
Cloud Foundry
Cloud Foundry was created by VMware to streamline deployment for application developers, application operators, and cloud operators. Cloud Foundry was open-sourced in 2011, under the Apache 2.0 license, with the pitch to developers that they could code in the languages and Web frameworks of their choice without worrying about the IT environment. It's a promise the project has kept.
Overall, Cloud Foundry is a strong platform as service in its open source form, and in both proprietary forms from Pivotal: online as Pivotal Web Services, and in the enterprise as Pivotal CF. In addition, you'll find good proprietary PaaS offerings based on Cloud Foundry are available from other foundation members, including ActiveState.
-- Martin Heller
Docker
Fast becoming the world's favorite devops tool, Docker passed the 1.0 milestone this year and welcomed the likes of Google, Red Hat, VMware, and Microsoft to the bandwagon.
A command-line driven toolkit for building, managing, and sharing Linux containers, Docker allows the same server images to be pushed from a developer's desktop to staging to production -- or to any Docker-compatible Linux server running anywhere. Unlike virtual machines, Linux containers share the underlying OS, eliminating OS bloat and resource-intensive hypervisors to deliver lean, zippy containers. With Docker, applications can be containerized in minutes, containers can be spun up in an instant, and images can be distributed and shared via the Docker Hub.
-- James R. Borck
Java
Java is open source in that it is released under an open source license. However, you can't really participate in Java as a project because all of the decisions take place behind the Big Red Wall. The most important detail about Java 8 is that it's been released and didn't take five years. Sure, it added features that C# already had. Sure, it's stuff you could already use in Scala with a syntax that wasn't goofy, but hey, you can finally do that stuff in the chosen language of your corporate masters!
Along with the coordinated evolution of the JVM, Java 8 has upgraded Java's programming model, productivity features, security, and performance. It's a release to celebrate.
-- Andrew C. Oliver
Groovy
Groovy is a dynamic language for the JVM that has been pushing the boundaries of what it means to write Java for some time. One killer feature of Groovy is the ability to pull down dependencies from Maven repositories with @Grape annotations. And while you're saying goodbye to dependency hell, you can write less code with abstract syntax tree transformations such as @Canonical. This annotation implements the Java Bean pattern given only field declarations. Macros for Java! If you're going to use Java to write a quick script or a cron job, Groovy is just the tool, and now it's looking pretty capable for big projects too.
-- Travis Wellman
Scala
The functional programming paradigm is ideally suited for expressing the types of transformations commonly found in data processing pipelines, and for problems that involve concurrency and parallelism, such as distributed computing in a Hadoop cluster. Scala combines a focus on functional programming with a robust and well-designed collections API, making it the natural choice for distributed frameworks like Spark, Scalding, and Mahout. Whether you're doing machine learning with MLBase, efficient approximations with Algebird, or building data workflows with Scalding, Scala's intuitive API and powerful combinators will make your code simpler, more reliable, and more robust.
-- Steven Núñez
F#
Why use F#? Plenty of reasons. F# is a strongly typed, functional-first language that lets you solve complex problems by writing simple code. Based on ML and built on the .Net Framework, F# offers good interoperability, portability, and runtime speed, as well as the "five Cs": conciseness, convenience, correctness, concurrency, and completeness.
F# was initially available only on Windows, but it's now a first-class language on a number of platforms. You can use it on the Mac and Linux with tool support in Xamarin Studio, MonoDevelop, Emacs, and others, and you can use it on Windows with Visual Studio, Xamarin Studio, and Emacs. Finally, you can use it on Android and iOS devices and on the Web running HTML5.
-- Martin Heller
Go
An open source programming language from Google that makes it easy to build simple, reliable, and efficient software, Go is part of the lineage that started with Tony Hoare's Communicating Sequential Processes and includes Occam, Erlang, Newsqueak, and Limbo. The differentiating features of the language include its extremely lightweight concurrency, expressed with goroutines. The project currently has more than 500 contributors, led by Rob Pike, a Distinguished Engineer at Google, who worked at Bell Labs as a member of the Unix Team and co-created Plan 9 and Inferno.
-- Martin Heller
Play
Play is a Web application framework written in Scala and Java. It maintains favors using convention over configuration and allows hot code reloading to boost developer productivity (because hitting Maven every time you fix a line of code makes my Irish blood boil). The Play Framework has been adopted by Web retailer GILT and by social networking sites LinkedIn and Klout for its lightweight, stateless, and Web-friendly architecture. Hey, even Spring Framework creator Rod Johnson crossed over. Maybe you should too.
-- Andrew C. Oliver
TypeScript
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Developed by Microsoft to help make JavaScript more reliable for large applications, it now works in any browser, for any host, on any OS. There are currently nine committers to the project, including Anders Hejlsberg.
TypeScript adds type annotations, compile-time type checking, classes, interfaces, modules, and an abbreviated "arrow" syntax for anonymous functions to JavaScript. In addition to support in Visual Studio, TypeScript has a command-line compiler, a Grunt plug-in, and support in Sublime Text, Vim, and Emacs.
-- Martin Heller
Akka
Akka is a toolkit for what Typesafe calls "reactive applications." When you build at scale, you need fault tolerance, but you must also quickly handle events without wasting cycles on waiting (usually on IO). In the brave "new" world of nonblocking IO and distributed applications, you need the right tools for the job. This open source toolkit was created by Jonas Boner in 2009 for the purpose of simplifying the construction of concurrent and distributed applications on the JVM. It's now part of the Typesafe Reactive Platform along with the Play Framework and the Scala programming language. It's also available in straight Java.
-- Andrew C. Oliver
Python
Python is a clear and powerful object-oriented programming language, comparable to Perl, Ruby, Scheme, or Java. It has modules, classes, exceptions, very high-level dynamic data types, and dynamic typing. There are interfaces to many system calls and libraries, as well as to various windowing systems. New built-in modules are easily written in C or C++ (or other languages, depending on the chosen implementation). Python is also usable as an extension language for applications written in other languages that need easy-to-use scripting or automation interfaces.
Python uses whitespace indentation, rather than curly braces or keywords, to delimit blocks; this feature is also termed the off-side rule. Pythonistas generally appreciate the simplicity of whitespace indentation, although it isn't universally lauded.
-- Martin Heller
Ruby
Ruby is a dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write. In addition to being the engine behind the popular Ruby on Rails Web framework, Ruby is a popular scripting language for system-independent utilities. In Ruby, everything is an object, but Ruby features single inheritance with mix-ins rather than the more complicated multiple inheritance favored by C++, Lisp, Perl, and Python. Ruby also features blocks, which Lisp and JavaScript call closures.
-- Martin Heller
Vagrant
Vagrant creates and configures lightweight, reproducible, and portable development environments in VMs. It supports Mac OS X, Windows, and Linux distros that use Debian or RPM installers, and it works with VirtualBox, VMware, Docker, Hyper-V, and custom providers. While Vagrant and its VirtualBox provider are free, the VMware provider costs $79 per seat.
The Vagrant Cloud hosts both public and private Vagrant "boxes." The box is the package format for Vagrant environments. Joining the Vagrant Cloud is free, but there is a monthly subscription cost if you want to host private boxes. Vagrant boxes typically run Puppet, Chef, or shell scripts to configure the environment from a base OS image.
-- Martin Heller
Jenkins
A fork of Oracle Hudson by the original Hudson team, Jenkins is an extendable, open source continuous integration server that monitors executions of repeated jobs, such as building a software project or jobs run by cron. Jenkins is a Java application that can be run from its WAR file; run from a native package on Windows, Mac, and many Linux and BSD distros; or deployed in a servlet container, such as Tomcat. There are hundreds of Jenkins plug-ins in the categories of source code management, build triggers, build tools, build wrappers, build notifiers, slave launchers and controllers, build reports, artifact uploaders, and many more.
-- Martin Heller
NetBeans
NetBeans IDE 8.0 provides out-of-the-box code analyzers and editors for working with the latest Java 8 technologies: Java SE 8, Java SE Embedded 8, and Java ME Embedded 8. The IDE also has a range of new enhancements that further improve its support for Maven and Java EE with PrimeFaces; new tools for HTML5, in particular for AngularJS; and improvements to PHP and C/C++ support. In addition to these technologies, NetBeans supports Struts, Spring, Hibernate, Bugzilla, Jira, Groovy, Grails, Ant, C/C++/Fortran, SQL, JavaScript, Android, iOS, Cordova, Subversion, Mercurial, ClearCase, and Git.
-- Martin Heller
Eclipse
The venerable Eclipse project is still updated on an annual basis, with nearly continuous bug fixes. Eclipse Luna, released in June, includes official support for Java 8 in the Java development tools, plug-in development tools, object teams, Eclipse Communication Framework, Maven integration, Xtext framework, and Xtend language. The Eclipse compiler includes language enhancements, search and refactoring, Quick Assist and Clean Up to migrate anonymous classes to lambda expressions and back, and new formatter options for lambdas. In addition to Java, Eclipse Luna supports graphical modeling, JavaScript, PHP, C++, Fortran, Spring, Groovy, Grails, DSLs, parallel programming, testing, automotive software, and IoT devices.
-- Martin Heller
Cordova
Apache Cordova (aka PhoneGap) is a set of device APIs, plus some tooling, that allow a mobile app developer to access native device functionality, such as the camera and accelerometer, from JavaScript. Combined with a UI framework like jQuery Mobile, this allows a smartphone app to be developed with only HTML, CSS, and JavaScript.
The application itself is implemented as a Web page, named index.html by default, that references whatever CSS, JavaScript, images, media files, or other resources are necessary for it to run. The app executes as a WebView within the native application wrapper, which you distribute to app stores.
-- Martin Heller
Karma
JavaScript doesn't compile, so even simple coding gaffes can remain obscured until runtime. This makes unit testing a must, but it doesn't have to be tedious. The Karma test runner for JavaScript automates unit testing, listening in the background for file system changes, firing off test suites, and returning results directly to your editor. Running on Node.js, Karma is agnostic to framework, test suite, and editor. Plus, it integrates with IDEs like WebStorm as well as built-in browser debuggers, letting you drill into call stacks and step through code.
Karma is fast, supports all modern browsers, and offers other premiums (like preprocessing routines to compile CoffeeScript). Best of all, Karma's constant feedback gives JavaScript developers peace of mind.
-- James R. Borck
Clojure
Lisp's elegance, simplicity, and power have inspired a number of other languages, many of which are attempts to make Lisp-like programming more accessible and more useful. Clojure brings Lisp and a strictly functional programming paradigm to the JVM.
Less flexible than Scala, but generally simpler for that very reason, Clojure is likewise platform-independent and able to draw on the existing ecosystem of Java libraries (such as Swing), which makes it possible to write cross-platform GUI-based apps directly in Clojure. Plus, a wealth of tools exist for working with Clojure, from online try-in-your-browser functionality to NetBeans, Eclipse, Visual Studio, and Sublime Text.
-- Serdar Yegulalp
jq
Not to be confused with client-side libraries, jq is a new, superfast, stream-based JSON processor with a natural query language. I use Curl a lot with JSON-based APIs, and jq proves invaluable for pretty printing the results, and "grepping" through a bunch of documents when Grep itself would not be sufficient. Take a look at the concise tutorial, and you will quickly get an idea of how awesome this tool is.
-- Travis Wellman
Read about more open source winners
InfoWorld's Best of Open Source Awards for 2014 celebrate more than 130 excellent open source projects in nearly every corner of computing. Follow these links to more open source winners:
Bossie Awards 2014: The best open source applications
Bossie Awards 2014: The best open source application development software
Bossie Awards 2014: The best open source big data tools
Bossie Awards 2014: The best open source data center and cloud software
Bossie Awards 2014: The best open source desktop and mobile software
Bossie Awards 2014: The best open source networking and security software
Copyright © 2014 IDG Communications, Inc.