“The less I needed, the better I felt.” ~ Charles Bukowski
We often forget to learn from our successful projects in the past. If you are old enough like me, you will remember a project called qmail. Nobody could poke a hole in its security because of its minimalist design (qmail security guarantee). Sysadmins also loved its simplicity. I see minimalism even more relevant today in software design than ever.
In comparison to distributed databases, which deals with mutable metadata and query language, object storage in theory should be a lot simpler. It only needs a simple set of APIs to handle blobs of immutable data. Amazon, Google and Facebook understood this better than the enterprise storage and operating systems vendors. They may store selfies and cat videos but in trillions. Scalability begins with reduction.
MinIO looks at storage from a minimalist point of view.
Software naturally bloats over time. Simple tools like ‘ls’ has so many features that I may never use in my lifetime. Even expert users often struggle to tune NFS and RAID options. Storage is one place, where I would adopt “self-driving” software at an early stage. Modern cloud infrastructure needs no fibre channel and storage array certifications.
With MinIO, both the server and client hardly has any options. It does one thing and there is only one way to do it. For example, MinIO client ‘mc’ has commands like ls, cp, sync, diff which are similar to the operating system provided tools. These commands work transparently for both the cloud (S3 compatible) and local filesystems on all major operating systems. They produce colored console output, human readable numbers and even a progress bar. It can move massive quantities of data and verify them transparently with checksums. Yet it is simple enough to not come with a man page.
Written in Golang
MinIO server and client are written in golang. Golang inherits Google’s ways of developing infrastructure software. From source formatting, to build tools, Go as a language assumes those responsibilities. No one’s opinion is heard and there is no confusion.
Golang is simple like Python, but as powerful as Java or C++. It’s channels and goroutines make it really easy to write scalable high-performance servers. Most notable benefit of Go for MinIO is a single static binary output, that is easy to copy to any machine and run. No more RPM and Deb dependency hell or root requirements.
MinIO is designed to store immutable data. Photos, videos, documents, machine logs do not change once they are produced. There is no reason to implement rich POSIX APIs and NFS/iSCSI protocols. MinIO deliberately avoids APIs to delete, rename, append or overwrite. All applications need is Get, Put & List APIs over HTTP(s). Operations are atomic. They either succeed or don’t.
There is no argument, Amazon S3 cloud storage is the gold standard for object APIs. MinIO server, client and libraries already support a subset of Amazon S3 v4 APIs. In fact client utility and libraries are designed with “Amazon First” priority. Features like IAM policy management, delete/rename and object versioning are deliberately avoided.
I personally prefer GNU GPLv3 to strongly defend software freedom. I chose Apache license v2 for MinIO, keeping application developers requirements in mind. Apache license is simple enough, but provides better protection than modified BSD or MIT license. It is also on the FSF approved list of free software licenses.
MinIO is in its early stage of development. MinIO client ‘mc’ and libraries (Go, Java & Node.js) are ready for public use.
Minio Community: https://minio.io/#community