It is by now well understood that we humans are capable of creating systems that are more complex than we can understand. I would venture to go a bit further with this and say that many of us like creating complex systems, the more complex the better, usually in the service of trying to be both useful and elegant at the same time. Nowhere is this truer than in software development, where the toll of complexity need not be paid until months or even years after its creation, and even then can be deferred by wrapping an incomprehensible “black box” with another layer that we believe we understand. This happens all too frequently, and the end result can be systems so complex that they can only be understood by other systems.
“…many of us like creating complex systems, the more complex the better, usually in the service of trying to be both useful and elegant at the same time.”
It so happens that this issue of RHRQ has several articles that touch on different aspects of this problem, beginning with our interview with security researcher Václav Matyáš. Professor Matyáš, who specializes in computer security and, lately, in the problem of usable security, has been working with Red Hat for a very long time; he might, in fact, be the very beginning of Red Hat Research itself. Red Hat security architect Mike Bursell spoke with him at length about the problem of making computer security—an inherently complex topic—simple enough to work for real people, among many other interesting topics.
Other examinations of how to approach complexity come in two articles on code analysis and formal verification. Vladimír Štill examines the long-running Brno research project DIVINE, the subject of his and many others’ PhD work. The project provides a new approach to the very complex topic of debugging multi-threaded programs. If the words “race condition” fill you with cold dread, you will want to read this piece. Meanwhile, Daniel Bristot de Oliviera reviews his own PhD work on modelling the Linux kernel using finite automata. Breaking complexity into chunks of observable behavior can make it much easier to deal with, it turns out.
Our final piece on complexity, from researcher and Red Hatter Ilya Kolchinsky, surveys different possible techniques for using neural networks to solve machine-native problems—problems that are inherently too large or complex to be solvable by a human. There are many emerging possibilities here.
Reading articles like these gives me some hope that we may be able to develop tools that will help us untangle some of the complexity we create. At the same time, we will of course learn ways to build even more complex systems, aided by these very same tools.
Perhaps some day we will build tools that actually make things simpler? I’ll believe it when I see it…