C++ Systems are Legacy Systems! This is tech racism!

Most of my previous work were with mission critical data-intensive applications for multiple global banks. Now I maintain applications taking care of airline reservations. All these applications are distributed in nature, mostly distributed monoliths or distributed micro-monoliths. All these applications has been around for years; I know one standing strong for 25+ years. These applications are written in pure C++.

The moment I said C++, I know what most of you are thinking: “LEGACY applications!!”

But if I would have said they are Java applications then the first thought would not be legacy. Somehow in the world of enterprise application C++ systems became synonyms to LEGACY systems. Anything C++ is outright legacy and people don’t want to go anywhere near it. The word LEGACY has a stigma which I hate.

Upon googling I found this, as the best definition of “Legacy System”:

A legacy system is outdated computing software and/or hardware that is still in use. The system still meets the needs it was originally designed for, but doesn’t allow for growth. What a legacy system does now for the company is all it will ever do. A legacy system’s older technology won’t allow it to interact with newer systems.

https://www.talend.com/resources/what-is-legacy-system/

However, the systems I am referred earlier has no major problems, they work the way they are intended to do. They face the same challenge (scalability, maintainability, extensibility, availability, etc.) like all other non-legacy systems and they evolve to take care of these challenges like their non-legacy counterparts.

These C++ applications are nowhere close to the definition of Legacy Systems. They run on new shiny hardware, they evolve to take care of new features, they connect to newer systems, they use messaging and some even use in-memory / distributed caching techniques. I am sure they can give a sweat to their non-legacy cousins if they ever attempt to do what they are doing.

So, at the end I felt that may be people corelates C++ with legacy and these C++ applications are inheriting the property; These systems are actually victims of collateral damage.

But how did C++ become synonyms to Legacy in the world of enterprise applications? The clue is in the evolution of C++. To make it more evident we will also compare it with Java.

YearC++ StandardInformal name
1980s Developed
1998ISO/IEC 14882:1998C++98
2003ISO/IEC 14882:2003C++03
2011ISO/IEC 14882:2011C++11, C++0x
2014ISO/IEC 14882:2014C++14, C++1y
2017ISO/IEC 14882:2017C++17, C++1z
2020ISO/IEC 14882:2020C++20, C++2a
Versions of C++
VersionDate
JDK Beta1995
JDK1.0January 23, 1996
JDK 1.1February 19, 1997
J2SE 1.2December 8, 1998
J2SE 1.3May 8, 2000
J2SE 1.4February 6, 2002
J2SE 5.0September 30, 2004
Java SE 6December 11, 2006
Java SE 7July 28, 2011
Java SE 8 (LTS)March 18, 2014
Java SE 9September 21, 2017
Java SE 10March 20, 2018
Java SE 11 (LTS)September 25, 2018
Java SE 12March 19, 2019
Java SE 13September 17, 2019
Java SE 14March 17, 2020
Java SE 15September 15, 2020
Java SE 16March 16, 2021
Java SE 17 (LTS)September 14, 2021
Java SE 18March 2022
Versions of Java

C++ was created in 1980s and it took ~20 years to come up with the 1st standard (C++98) and another 10+ years to release its next major version (C++11). So, it is kind of evident why in these 30 years (i.e. from 1980s to 2011) it earned the reputation of being “LEGACY”. On the other had we can see new versions of Java getting released consistently.

I guess the C++ Standards committee has understood this mistake and has started evolving the language rapidly. Now the language is changing at such a rate that it is becoming hard for the industry to cope with it.

Based on all the changes C++ has gone through in the last 10 years and seeing how the standards committee is tirelessly working to modernize the language we should stop calling it a Legacy language. The association with the term legacy is hurting the C++ ecosystem and even hurting future development in enterprise world. How?

  • C++ applications are being starved; Businesses are not funding their upgrades.
    • There are many organizations running C++ applications that have not been upgraded to C++11. Such upgrades are not a priority for business & product managers. Most people in business and product management are from 90s era if not 80s, and none have heard of C++ upgrades. So, the onus falls in the hands of engineering teams to drive this initiative and get the needed budget for such upgrade. This is adding to the resistance to change & modernize the C++ ecosystem. Engineering teams must explain in terms of security and vulnerability of using an older version of C++, may be that will ring a bell. Some of the new features are bound to boost overall performance, an additional point to make.
  • Next generation don’t want to learn a legacy language; So many universities have dropped C++ from their curriculum. The industry is seeing a drop in number of fresh graduates with C++ knowledge and willingness to work on it.
    • We need to drive the point that C++ is not Legacy. Not anymore!! Newer version of C++ is so different & improved that people are calling it Modern C++ to differentiate between C++98 and version C++11 & above.
  • C++ has brought so many new changes, that there is a need to revamp all courses still teaching C++. Otherwise, we are still teaching the legacy C++ and not Modern C++.
  • People in general don’t believe that a C++ application can run in pods and can be orchestrated by Kubernetes. There is a need to debunk the misconception that C++ applications can’t run on cloud and C++ can’t be cloud native.

Because of all these we are not seeing any major C++ development happening in enterprise space. C++ is getting pushed into a language for embedded systems, despite all its bells and whistles to regain its status as a modern general purpose programming language.

There is an immediate need to kill the stigma of being legacy and showcase some beautiful enterprise grade C++ applications running on cloud. Otherwise, enterprise applications in C++ will be strangled to death. Here are few things that may help:

  • If we can build some open-source application frameworks that can help teams kick start their C++ application development. Every organization who still use a C++ applications for their critical workload are mostly relying on beautiful in-house frameworks, can we not open source them and make it available to the world. The vision should be to have de facto Autumn for C++ developers like Java’s Spring.
  • C++ needs something like Maven. With Artifactory, Nexus, etc. becoming the de facto for artifact management in enterprise ecosystem. Make files are not able to cope up and looks crude. A better build tool for C++ applications is the need of the hour. Today, C++ camps are making use of python and other scripting languages to orchestrate their build process. Some serious standardization can be achieved in this space.
  • More and more open-source C++ projects directed towards modern application development frameworks would help. C++ community was never into this before, but we have seen how these frameworks were leveraged in enterprise world.
  • Lastly, we need a host of open-source libraries for faster and effective data processing & parsing.

I strongly believe such changes will give new life to Modern C++ in enterprise world, which it rightfully deserves.