00:00:10.720
Today, I want to talk about gamification for the Ruby standard library in Ruby 2.5 and Ruby 3.
00:00:18.110
I’m a member of the Arirang community, maintaining Ruby's standard libraries. I also maintain the Ruby website and various computer and network resources. In addition, I operate several sites related to Ruby gems and various related platforms.
00:00:36.800
Every Tuesday, if you come to Tokyo, Japan, please join our meetup organized by Matsuda Akira and me. We discuss programming and would love for you to participate.
00:00:50.430
I would like to introduce our Ruby language sponsors who have supported us significantly for development. These sponsors include Heroku, Fastly, the NSA, and Microsoft, who provide unlimited resources for our website, ruby.org. Heroku supports our website with its CDN capabilities. Meanwhile, the NSA provides network and computer resources for package distribution, and Microsoft offers a suitable environment that supports Windows.
00:01:19.250
A special thanks goes to the Ruby Association in Japan, Nihon Ruby no Kai, and the Ibaraki University Research Laboratory, who provide grant money for our diverse infrastructure. Nihon Ruby no Kai helps with the Mac OS support and ensures continuous operations.
00:01:52.660
Now, I would like to start by discussing the background of the Gamification project. The standard library is a bundle of libraries that are installed together with the Ruby interpreter. They include various functionalities like strings, arrays, and essential utilities. You can use the standard library without any additional dependencies. We categorize the standard libraries into three types, which I will elaborate on later.
00:02:24.660
Currently, the stable version is Ruby 2.4, which contains over 18 libraries in the standard library. The goal of the gemification project is to transition standard libraries into what we call default gems and bundled gems, which simplify dependency management.
00:03:02.470
To illustrate the differences in Ruby language and standard library, I want to highlight that the development of the standard library closely follows the evolution of the Ruby interpreter. Default gems are defined within the Ruby core repository, and their updates correspond with updates to the Ruby interpreter.
00:03:26.850
On the other hand, bundled gems, which are not developed directly in the Ruby core repository, are developed on GitHub and managed separately. This can lead to an increasing number of standard libraries transitioning towards gemification, bringing about benefits in security and maintainability.
00:03:47.590
For example, with Ruby 2.4, we have numerous libraries becoming standard gems, transitioning many existing libraries into default gems. The differences between default gems and standard libraries are mainly in how they are structured, with default gems having a gem specification file associated with them.
00:04:12.760
Default gems can have different location specifications from standard libraries; you cannot install them in the same way as you would traditional gems. However, they can be used more flexibly in certain projects.
00:04:34.620
The usage of default gems means that you can identify default gems utilized in your application easily. For example, the OpenSSL gem has transitioned well, providing significant updates and functionalities by using the gem installation process.
00:05:00.430
There are difficulties concerning security and maintaining functionality across differing Ruby versions, which we are addressing. Part of the transition towards gemification involves ensuring that libraries can be more quickly updated to address security vulnerabilities when necessary.
00:05:20.480
The Psyche gem is another example, where the upstream repository has transitioned to the Ruby organization on GitHub, allowing for more flexible management and rapid updates as necessary.
00:05:46.610
Next, I want to address bundled gems, which are entirely different from default gems. These have a particular infrastructure structure and are installed simultaneously as the Ruby environment with no separate installation required.
00:06:09.593
Bundled gems are installed alongside Ruby installations, relying on certain libraries and dependencies. This presents a better solution for library distribution without requiring network installations for certain setups.
00:06:32.760
However, bundled gems do come with some challenges, such as not being able to utilize C extensions and other functionalities. We are examining ways to integrate these into Ruby’s development environment to support all necessary features effectively.
00:07:00.430
There is also the challenge of ensuring that bundled gems work properly with all versions of Ruby. To address this, we are developing a test suite called 'test bundles' to guarantee that bundled gems integrate well with Ruby’s development effectively.
00:07:26.930
The overall aim of gemification has been to enable upgrades like the introduction of default gems such as OpenSSL and Psyche. These transitions provide developers the flexibility to install necessary updates without modifying the core Ruby interpreter directly.
00:08:02.230
In the past six years, we've seen significant transitions of libraries into the gem framework, with new specifications helping articulate how these libraries operate and integrate with Ruby’s main structure.
00:08:36.890
By transforming standard libraries into regular gems, we also enhance their releasability and improvement, fostering a healthier development ecosystem.
00:09:04.790
Finally, I believe that by focusing on the communication channels between Ruby developers and standard library maintainers, we can foster a more robust ecosystem that seamlessly integrates updates and maintenance.
00:09:29.390
In closing, gemification acts as a viable path forward for our Ruby libraries while ensuring aligned efforts among developers to build towards secure, maintainable solutions.
00:09:56.560
Thank you for your time, and I look forward to our discussion regarding the future of Ruby gems and the exciting changes on the horizon!