Things are moving to much fast in our networking industry. Over years, networking depended on vendors releases and products. Current users are more demanding in terms of rapidity and new useful services. Networking endpoints are now not just computers and servers, but everything with just a networking stack embedded -- network-capable devices. The number of users are growing very fast and each user represent more than 1 endpoint. So the design of systems are not just based on the number of users/customers of a given service [ Of course, it depends on your service policy ]. Rewrite or re-design the code|software|product to embrace this idea of scaling is not to complicate than re-design the network infrastructure [Most all in one network product (proprietary hardware & software bundled) are built by vendors and depends on vendors ]. Also it is more complicated for those companies that offers Networking Infrastructure or Functions as a Service.
Many companies that use those networking products have been faced differents issues in their infrastructure. Some customers need to know more about what is going in the product at the low level, their faced some issues that come from hardware components and sometimes from software / features -- Think of memory and cpu consumption for non needed features, thing of high power consumption, thing of port capacity, thing of hardware & software redundancy, think of process/feature crash isolation, think of features installation & deinstallation, think of visibility at packet level, think of dimesions of the box, think of nex feature release cycle, think of continuous bug, think of backdoor myths, .... just some opinions to mention. Some kind of those opinions lead many companies to take control of their own destiny, others need fast new features release because their trafic is growing exponentially and some need to reduce cost of products maintenance and acquisition. The results of those are open source projects in our networking industry, collaboration of many engineers from differents companies, collaborations of many companies, creation of many networking start-up, creation of many blogs of experience and knowledge sharing, creation of many conferences/presentations events ... So good news that are helping many companies to improve their infrastructure; that pushing some vendors to accelerate innovation; that bringing some vendors to rethink their strategy; that pushing engineers to improve their skills and develop new ones; that pushing IT professionals to rethink the way they learn; that pushing trainers to redesign their material; that motivate Standard organisation to create and define new concepts; that reinforcing cooperation between Universities, Research centers/labs and Companies; that provinding new opportunities and bussiness ideas. We have now new concepts and features as response to this trend in the networking industry. But the old one which is now more and more requested is Linux Operating System, precisely its networking stack. Linux, over years has powered many network devices from all sizes. Its open, flexible and modular architecture has inspired (drived) a large number of products design. Each component of this Operating System, has helped at some level in major networking products either at the Bootloader level or at the Network OS level or at the features set level. But nowadays, we are dealing with lot of Linux-powered things that have networking capability -- Think of IoT products. A strong understanding of Linux internals and programming can help anyone interact with smart things and even build new amazing products from scratch. This fact is real in the network industry. We are talking about White Box where you can manipulate everyting inside/internally with programming tools. So having programming skills or know how to consume APIs become useful, not to say mandatory. Due to this trend, most networking vendors are making their products API-Driven in order to let the customer interact with it as a developer. The clear or white box ecosystem is growing and Linux is one of the enablers. Suppose, you can buy your network box from an ODM ( Original Device Manufacturer ) with merchant silicon chip & commodity cpu-memory and no OS loaded, then you get a third-party NOS (Network Operating System) and finally you buy or build your own applications/packages/features. Information exchange between all these components are made by APIs calls with well defined data modeling scheme. This is a simple vision of making a SWITCH feels LIKE a SERVER. Then make the networking infrastructure programmable at any level. Most commercial or free Network Operating Systems (NOS) are Linux-based so custom applications/features depends on. This is one reason why understanding Linux and its networking stack in a developer fashion is very important for our great future in the networking industry which is rapidily gaining every domains of activity [ transportation, health, financial, education, military, entertainment, research, security, food, ...]. I remember the linux courses at school, we learnt a lot of shell commands, the directory tree and how to install and configure some packages, features and servers. Followed by some pratical C programming course, we wrote basic programs and compiled them with gcc. I think learning in this way, would help us use the operating system but not use its power to program or build network product. The Linux networking stack with its all features/tools and protocols from L2 to L4 are very interesting to increase skills. Learning networking protocols by analysing the stack source code and add or improve features is very important actually in our domain. For example, looking at the arp, vlan, icmp, ipv4, ipv6 implementation in linux kernel will shape your understanding at a low-level - know how things work under the wood. Checking the TCP/IP suite implementation in the kernel and all the available system calls that let a user-space program interacts with is useful to innovate. Consider the routing subsystem implementation in the kernel, you will understand how widely used routing protocols can be implemented so that you may get inspiration to bring new feature on the networking table.
As time is moving, the linux networking stack is growing with new functionality so begining this journey of exploration maybe difficult. But a good understanding of C programming is mandatory before deep dive into source code. Also there lot of good books, blogs, presentation and videos about this subject. Finally, trying to be member of the community or participating in an open source project is a good method to stay up to date and learn a lot from others experienced persons. In the coming days, i will first share some posts on C programming that are useful to understand the source code syntax; then i will share some posts on the networking stack itself, both in english and in french. Thanks for reading and stay tuned.