Jiwei Yuan's Thoughts and Writings

Layer of Software, Application and Application Infrastructure

If you had to pick one idea one concept that’s the most important thing in all compute science world? What it is? Donald Knuth’s anser is “layer of abstraction”(watch A Philosophy of Software Design by John Ousterhout). Layer of abstraction is a powerful concept in computer science. It’s purpose is to hide the complexity of the underlying implementation and provide a clear and easy-to-use interface. One of excellent example of layer of abstraction is layer of computer architecture(Watch Computer Architecture - Levels of Transformation by Onur Mutlu). Another example is layer of computer network(Watch Computer Networks - Layering by Jim Kurose).

Layer of Software Architecture and Computer Network

Layer of Software

Jess Martin write a blog about software layers. In his article Pace Layers for Software , he thought software system as a layered structure and each layer different capability. Building upon his interesting thinking framework, I made some adjustment and addition for his work. I redraw the illustration of layers of software and give more explanation about this kind of thinking. These kind layered structure might provide you an insightful abstraction towards the software system, alouthgh it’s seems be very trivial for experienced software engineers. In this abstraction, the interesting part might be the application and application infrastructure.

Layer of Software

Plguin/Extension

A plugin/extension is a software add-on that is installed on a program, enhancing its capabilities. Usually, they rely on the runtime of host application. The difference between plugin and extension is plugin didn’t change the host application’s functionality, while extension might modify the host application’s functionality. Following are some examples of plugin/extension. Example including Microsoft OfficeOffice Add-ins, Anki Add-ons, Obsidian Plugin, Zoom Plugins, PostgreSQL extension, Chrome Web Store, VS Code Extension, Gradle Plugin.

Script

Application

Most of software development engineer work on this layer, including:

- Desktop Application
- Web Application
- Mobile Application
- Backend Service
- Machine Learning Application
- Data Analysis Application

Application Infrastructure (Library & Framework & Platform)

- JavaScript, NPM, https://www.npmjs.com/
- Python, PyPI, https://pypi.org/
- Java, Maven, https://mvnrepository.com/
- .NET, NuGet, https://www.nuget.org/
- Ruby, RubyGems, https://rubygems.org/
- Rust, Cargo, https://crates.io/
- Go, Go Modules, https://pkg.go.dev/
- PHP, Composer, https://packagist.org/
- Frontend Framework like React, Angular, Vue
- Backend Framework like Spring, Django, Express, Flask
- Microservice Framework like Spring Cloud, Dapr
- Machine Learning Framework like TensorFlow, PyTorch
Platform Software
- Database(PostgreSQL, MySQL, Oracle, SQL Server)
- Key-Value Store(Redis, Memcached)
- Stream Processing(Kafka, Flink)
- Full-Text Search(Elasticsearch, Solr)
- Web Server(Apache, Nginx)
- Container Orchestration(Kubernetes)
Serverless Platform
- AWS S3,
- AWS RDS
- Auth as a Service
- Email as a Service
- Payment Gateway(Stripe, Paypal)
- Email Service(AWS SES, SendGrid)

Programming Language

Different programming languages provide different abstraction towards the operating system and hardware. Higher-level languages hide more details of memory management, concurrency, and system calls, while lower-level languages expose more control over these aspects. The choice of programming language determines how much of the underlying system complexity is visible to the developer. Most programming languages also ship with a standard library that provides common functionality such as data structures, file I/O, networking, and concurrency, so that developers don’t have to interact with the operating system directly.

- System Programming Language(C, C++, Rust)
- Application Programming Language(Java, C#, Go, Swift, Kotlin)
- Scripting/Dynamic Language(Python, JavaScript, Ruby, PHP)

Operating System

The operating system is the layer that directly manages hardware resources and provides abstractions for upper layers. It handles process management, memory management, file systems, device drivers, and networking. The OS provides system calls as the interface for programming languages and applications to interact with hardware.

Desktop/Server OS
- Linux(Ubuntu, Debian, CentOS, Arch Linux)
- Windows(Windows 10, Windows 11, Windows Server)
- macOS
- Unix(FreeBSD, OpenBSD)
Mobile OS
- Android(based on Linux kernel)
- iOS
Share this post on: Share this post on X Share this post on LinkedIn