We see two major trends converging: First, more devices are being connected and those devices need to communicate, driving a constant rise in network use. Second, more data is being created, processed, and stored.
The problem is, there's a massive asymmetry in the network. A relatively tiny number of "smart" nodes do all the work and receive most of the communication, while an enormous number of nodes mostly just add load to the network.
The way we build, test, deploy, maintain, and support applications has changed a lot in the past five years. Containers, microservices, the growing number of connected devices (IoT, if you must), and the sorts of applications people are building with Ember, Angular, React and Meteor are big, not small, changes.
How does Ruby and Rails fit into this rapidly changing landscape? If you search Google for "what companies use Ruby or Rails" there's not a lot of specific details about what people are doing with Rails. How does Rails fit into a containerized microservices environment? How are people building services with Rails, or are they? I'm curious about this and I think a lot of the new developers learning Ruby in this changing environment would be as well.
So, I've put together a really brief survey; I'd love to hear more about why people are using Ruby, or why they are not.
Analyst is a tool for anyone who has struggled to understand, evolve, transform, and scale an application.
It is an alternative to paying the significant cost to rewrite an application that has grown too large and complex to confidently update as quickly as business innovation now requires.
I'm excited to share with you that I've formed Rubinius, Inc, an Oregon corporation designated as a "benefit company", to focus on building excellent programming language tools and sustain the development of the Rubinius platform.
You may be wondering, What is a benefit company?
Generally, it is a statutory designation that allows the business to consider the general social benefit and the environment when making decisions, rather than only focusing on revenue impact. The designation does not affect the tax structure for the business, and typically requires the business to publish an annual transparency report about the company's impact on society and the environment.
I elected to form a benefit company, rather than a foundation or non-profit, because I believe it provides the lowest administrative overhead while building a sustainable economic model to support Rubinius as an open source project. A portion of the shares of Rubinius, Inc are dedicated solely to sustaining Rubinius.
A little more than a year ago, I published a series of posts about the focus for Rubinius 3.0 (part 1, part 2, part 3, part 4, part 5). We spent a lot of time last year on some architecture improvements, so now it's time to get busy on those 3.0 goals. This post will catch you up to date.
First, Rubinius uses a versioning scheme that associates a "version number", in the form of EPOCH.SEQ, with a particular git commit SHA via a git tag. The first part of the version number, the EPOCH, signifies "a period of time marked by notable events or particular characteristics" (see the dictionary definition). This post explains the Rubinius 3.x epoch.
The SEQ is a monotonically increasing number that has no other meaning than to signal that newer code is available. The Rubinius versioning scheme is emphatically not SemVer.
Rubinius is a platform for building programming language technology.
It is difficult to imagine human society without the presence of language. Every advance in human history results from processing and sharing information. The digital revolution is merely the latest of many such advances. Languages are the preeminent tool for processing information. Through the use of languages, humans do the work of information processing and transform the world around them. Humans discovered fire; they invented rocket engines.
Computers are the engines for information processing. Extremely powerful computers are everywhere now. Hundreds of millions of people use them every day. But a tiny fraction of those people actually use the computer itself. A computer is the most powerful machine humans have created and yet most people only use the computer through an app someone else made. The next leap forward for society requires widespread ability to use computers directly.
Rubinius is not the only project focused on making computers better for more people. Most projects aim to make computers easier to use in some respect. Rubinius is instead focused on making people more able to use computers. Technology is transformative. Henry Ford didn't just manufacture cars, he helped create a nation of drivers. Rubinius envisions a world where people use computers to solve problems, building their own roads in a sense, not merely following the roads someone else built for them.
Rubinius provides Docker images based on Ubuntu 15.10 and 14.04. The images are automatically built on Docker Hub and available at the Rubinius Docker organization. To use the Rubinius Docker image, follow these steps:
your-shell$ docker pull rubinius/docker your-shell$ docker run -it rubinius/docker bash docker-shell# ruby -v
Rubinius provides Homebrew binaries that should be compatible with 10.8 (Mountain Lion) and newer OS X releases. To install Rubinius on Homebrew, follow these steps:
$ brew update $ brew tap rubinius/apps $ brew install rubinius
Rubinius builds binaries for Ubuntu for versions 12.04, 14.04, and 15.10. These binaries are built so that they can be used on Travis with RVM. They can also be manually expanded for use with chruby.
We would like to assist building packages and binaries for other Unix/Linux systems. We are removing the Ruby build dependency to make the process of building Rubinius much easier. If you'd like to help build Rubinius binaries or packages, join us in the Rubinius Gitter channel.
Source code tarballs are available for the following releases:
We work hard to provide a secure environment for running your code. If you find a security issue, please email firstname.lastname@example.org. Encrypt your email using our public key (also available on the our website or from the MIT PGP database).
Our policy is to respond to you within 72 hours and we will work with you to create a fix for the issue. Sending an email to email@example.com will not result in a public disclosure. We will work with you on a public disclosure after we have prepared a fix.
For security issues with the standard libraries that are copied from Ruby, please report them directly to that project. We are notified as part of their reporting procedures and we ensure that Rubinius is patched in the cases when those vulnerabilities affect Rubinius as well.
Remember that your real job is that if you are free, you need to free somebody else. If you have some power, then your job is to empower somebody else. — Toni Morrison
The Rubinius project is committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, religion, or non-religion.
As part of our commitment, we adopt a Code of Conduct that applies to any Rubinius project, space, and event, whether online or in-person. If you are subject to, or witness to, possible violations of the Code of Conduct, see the detailed reporting guidelines.
The Rubinius Code of Conduct is not intended to create any procedural or substantive rights under any system of law. Participation in the Rubinius community is voluntary and subject to complying with the Code of Conduct.
A role in the Rubinius community is not a person or a position. A person may participate as part of a role, or in multiple roles, or any combination. A role has two fundamental parts: 1. a problem to solve, and 2. a network of collaboration with other roles.
The advice process is a method of making decisions in a network of collaborating roles. The advice process contrasts markedly from the decision making process in a typical hierarchy, where one's position confers and limits one's authority to make decisions.
Using the advice process, anyone is empowered to make decisions by following the principles of the process:
Describe the problem to be solved. Without a firm understanding of the problem, time is wasted and unnecessary conflict is created.
Describe the solution that is desired. It is not necessary that everyone understands or agrees with the solution, but the person proposing to implement it should be able to communicate it effectively.
Consult the people who would be affected by the change the person wants to make. This is an especially challenging part when working on something like an open-source project where we often don't know who is using the project. Working to improve this is a major part of implementing the advice process.
Seeking input from people with relevant expertise. Nothing requires following someone else's recommendation, but if the person is going to disagree with someone who has relevant expertise, they should be able to articulate a very good reason for doing so.
The advice process is not a panacea, nor is it necessarily a conflict resolution mechanism. However, since it allows people to make progress solving problems without requiring everyone to agree ahead of time, it can significantly reduce needless, counter-productive conflict.
The Rubinius community is a group of people who work together, influenced by our values, to accomplish things that fulfill the Rubinius vision and mission.
Our vision is a world where everyone can use the tremendous computing power humanity has created to improve their well-being and quality of life.
By "everyone" we mean creating the most benefit for the least amount of effort for the greatest number of people. There will always be incredibly smart people who do very difficult things. For the rest of us, to steal a quote by Moshe Feldenkrais, we want to "make the impossible possible, the hard easy, and the easy elegant".
Our mission is to build the best platform and tools for people to use the power of languages to process information to create value and solve problems, prioritizing our efforts to improve access for people who have been marginalized and excluded.
Every aspect of our lives is touched by our ability to process information. Living things process and share information and this capability results in an exponentially decreasing cost of goods over time (to some minimum limit), a concept Pieter Hintjens calls cost gravity.
Languages are the most powerful tools humanity has invented for processing and sharing information. As with any technology, these tools are multipliers of our efforts; they can be used for good or ill. To give people the opportunity to create health, wealth, and happiness in the world, we must give them access to these tools.
We value impact, quality, inclusiveness, diversity and balance, and we actively promote them.
We celebrate our differences and appreciate them as a source of strength. We prioritize improving access and championing the needs of people who have traditionally been excluded. We get things done, lead by example, and we constantly strive to improve. We realize that we enjoy a lot of privilege and we work hard to empower others rather than advancing our own interests.
We welcome anyone who shares our vision, mission, and values to be a part of the Rubinius community. We describe the many opportunities to participate and contribute in our section on Roles, and one of those roles is to help better define the roles.
The gallery highlights Rubinius in action with testimonials, case studies, language implementations, and projects related to Rubinius.
I have felt a disturbance in the force; it is Rubinius. — Darth "Anakin Skywalker" Vader
I'm pretty sure I'd use this. — Gandalf
A Clojure-like Lisp programming language.
The Atomy programming language.
The Fancy Programming Language - Fancy is a dynamic, object-oriented programming language heavily inspired by Smalltalk, Ruby and Erlang.
Functional Ruby. Fuby is a hybrid functional/object-oriented programming language.
Learning language from Rails Girls Summer of Code. Features TBD.
An experiment to implement a functional, distributed Lisp on the actor model, inspired by Erlang.
An Akin programming language optimized for fun.
A terminal emulator for the Atom editor that is pre-configured for running Rubinius.
A console interface to the Rubinius language platform.
Valerie Concepcion: If you're interested in getting things like Raspberry PI's, Legos, and Wii Remotes to play well together, Valerie can help. Drawn to the Maker movement and inspired by her friends who work in non-profits, she is interested in applying technology for social good.
Jesse Cooke: As co-founder of Watsi, a venture to fund healthcare for people around the world, Jesse was part of YCombinator's first ever non-profit. Jesse has been contributing in any way he can to Rubinius for a long time. If you visit Portland, OR, you may see him riding this weird bike with a belt instead of a chain.
Stacy Mullins: At one point, Stacy would have gladly chosen a typewriter over a computer. But at school for graphic design, she became fascinated by technologies like HTML and CSS and the ability to create something from scratch. Now she's learning about crafting code and communicating well with other developers.
Yorick Peterse: When not breaking code, Yorick is fixing it and asking questions. Either way, there is a lot of code happening. He's drawn to the deep technical details of systems like just-in-time compilers and concurrency. He may or may not be a Dr. Evil character hatching plans for world domination.
Sophia Shao: A recent graduate of Carnegie Mellon University's Electrical & Computer Engineering department, Sophia has tackled modernizing massive legacy applications. She's also delved into the deepest corners of Rubinius. Hit her up for tips about debugging machine code.
Brian Shirai: Having once passed over Ruby for being too much like Perl, Brian rediscovered Ruby over ten years ago and has been working on Rubinius for the past nine. Inadvertently, he's also learned Perl and Bash.