Skip to main content

Project: Boost-free goblins

The headache: Boost

Don't take me wrongly: Boost library is a powerful set of tools for bleeding-edge technology. Much of it gets absorbed into the C++ Standard Libraries.

The problem lies in our project being inactive for 7 years, which means it is relying on a library that is 7 years behind. Installing such an old library is a chore, and securing a pre-built package is problematic at best. The project is even incompatible with the later versions of Boost. It may have once given the original developers a powerful technology to propel their project in the past, but now we are stuck with clock stopped at 2011. Along with libtcod being stuck also in 2012, dealing with Boost is critical to bringing the project up-to-date.

Options

There are several ways to address the issue.

Option 1 : Upgrade

We can read each related source code, research how Boost has modified the relevant function calls, and either fix the expected return type or required input type, This may lead to more and more changes like a ripple effect, and would be very difficult for a group of developers who have only just inherited a very complex code without any real documentation.

Option 2 : Keep it as is

Who cares? Let's just recompile the whole thing from an outdated repository and hope for the best. Yeah, I am kidding.

Option 3 : Remove Boost

It is in our way. Take it out. Sounds like a bold and drastic move, but given the library being 7 years old, with much of its function now integrated over several iterations of C++ standardization, this sounds almost plausible.

The Choice

Coincidentally, Robert, a major contributor to the project, thought similarly and took action: he got rid boost::cstdint library by converting it to std::cstdint, a comparable STL to the Boost version. The choice was made.
I jumped in.

Action

Identification

I started out by identifying all libraries from Boost. On bash command line, I entered the following:
git grep '#include [<]boost' | sed -n 's/^.*<\([^>]*\)>.*$/\1/p' | sort | uniq
  1. This first calls git grep to find all lines of include statement for Boost libraries.
  2. Then, it filters out all other information except for the actual name of the library between < and >.
  3. Lastly, it sorts them by name and finds just unique lines, leaving us with a nice list of all Boost libraries being used.
There was 52 lines. 52 Boost libraries to remove. Well, what is a good open-source developer to do with so many things just categorized as bugs?

Cry

So I cried the battle cry of a tired programmer on a warpath to remove Boost: I made Issues on the repository. 52 of them. I even made a project to group and track progresses.

Possible Outcome

I am fairly confident that removing Boost is going to be a challenge. The experience will teach me much about the repository itself and how it was designed. And if completed, that's one less dependency to track. Even if I fail, this will at least minimize and maybe update the Boost libraries. And afterwards, the work will still be far from being finished. We still need to bring libtcod up-to-date, and also figure out how to compile the project in Windows platform, not necessarily in that order. Much to do. Still, I am confident that this little war of mine will be finished; I have the entire open-source community to rely on. It is just a matter of time they answer my call-to-arms and cry the same cry of a frenzied programmer facing an interesting puzzle.

Comments

Popular posts from this blog

Creating a patch for GNU GCC using Git

Overview and Target Audience The GNU GCC project followed a blend of a traditional method with contemporary git tools when it comes to contributing code, making the experience unique from some other, git-based projects. This blog post will explore different aspects of the process, helpful commands, and various scripts that would make the experience more pleasent for new contributors. While this blog aims to help new contributors get acustomed to the GNU GCC code culture and make contributing easier, it must be stressed that this is not in any way in-depth exploration of the process. This should help you put your first foot forward; the community will help you take the rest of the steps from that point on. This post also assumes the user is in a POSIX environment (e.g. Linux, FreeBSD). Git and GNU As stated in this phoronix post , GNU GCC made a full transition to git early 2020. As of this writing, the community seems to be adjusting to the new tools. GNU GCC hosts its own git serve

Setting up IRC

About IRC Internet Relay Chat was once the most popular real-time communication method that uses computer for a large spectrum of community groups. While it has largely been supplanted by more contemporarly methods for most people, IRC is still a prefered means of communication among older software projects like GCC. The Client As an old technology that is also very favored among programmers, IRC has many clients with different flavors, from GUI to CLI to headless. As a linux user with strong attraction to tmux, I chose weechat. Depending on your distro or OS, install your client first. Configuring Weechat I will be using GCC channel in OFTC server as the example. How are we configuring this? While Weechat has a configuration file, Weechat officially advises against using the file to configure the program behavior. Instead, it promotes `/set` dialog within the client to set the proper configuration. Connect to server Let's first connect to server. The `#gcc` channel is host

Debugging with GCC: GIMPLE

GCC and GIMPLE One of the very first thing GCC asks the GSoC applicants to do, even before writing the application, is to try various different debugging techniques using GCC. I was personally familiar with the basic, compile-with-g-flag-and-use-gdb method. Turns out, there's more: GIMPLE. A Simple but Non-trivial Program Problem Description The instruction asks to compile a simple but non-trivial program with some flags that generates debugging information: -O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all . Because I was keep reading on ways to debug GCC just prior to the statement, I immediately thought "GCC" and tried make -j8 CXXFLAGS="-O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all" . This was a mistake: turns out, GCC can't be compiled with those flags. Thankfully, GCC developers have a very active IRC channel for me to signal SOS. Resolution jakub and segher were quick to respond to my call for help. jakub: it isn't meant that y