During the last ten years or so, much effort has been spent on developing software architecture by analogy with hardware architecture from where the idea seems to originate. Much of the work has been devoted to specifying standard program units, called components, and their connections. The architecture is then the specific organization of these components and connections. In this paper, I suggest a completely different way of defining software architecture that does not take its influence from the hardware industry but from the fact that software systems are formal systems and that their formal models could be used not only to characterize systems but, may be more important, to categorize software systems.