What's the difference between xxxx-client and xxxx-server packages?
When I'm gonna install packages or software I can see client | server versions. What does it mean actually? For example:
apt-get install xxxx-client
apt-get install xxxx-server
What are the difference between these? How can we categorize when we need to install an application or package? Let's say:
If I want to install nginx,
I simply install by typing apt-get install nginx
,
so there we don't have any confusion.
When I’m looking for MySQL, how to choose which edition should I install? I'm so confused with client and server.
Almost any application can be made using a distributed client-server model:
- server provides a resource1 or service,
- client uses the resource or service.
In some applications, both the server and client are made by the same producer and are branded as parts of one product – this is the case of OpenSSH or MySQL.
However, the protocol between server and client(s) is what really matters. The power2 of the client-server model is that any software implementing the protocol can use it (as both a client or server, see below). Why the producers of Nginx (or Apache) did not provide a client for their software? Because their products are web servers and there have been lots of clients (called web browsers in this case) available already, like Firefox, Chrome, etc.
Back to the first group… Although an “official” client for OpenSSH is provided, you can use another one, like PuTTY, right? And there are also alternative MySQL server implementations (MariaDB and Percona Server) which collaborate with the common MySQL clients which, again, are not limited to the command-line MySQL client provided by the package mysql-client
.
1 The resource can be a database (*SQL), webpages or even a console (keyboard, mouse, and monitor) in the case of the X server.
2 Another advantage is that these parts can be run on different machines – but mostly also the same one, just as their deployer needs.
Some programs are available in server mode, others as client only.
nginx
is a server only application so the server/client difference makes no sense (to me anyway).
Openssh however has both, ie.
client (allowing login to a remote box or server), or
server (allowing other remote clients to login to itself, the server).
If I want to install nginx, I simply install by typing apt-get install nginx, so there we don't have any confusion.
Correct, nginx is a web server, among other things. It serves content to any client that is set up to communicate with it. There are already a ton of well designed clients for various purposes, so nginx did not need to create their own.
When I’m looking for MySQL, how to choose which edition should I install?
The server is the database, it holds all the databases and tables and data. It also serves the data to any clients that know how to communicate with it.
The client connects to the database. It can be used for general administration tasks or to perform queries or other functions on data remotely.
If you want an analogy, you can think of it as a store. A store (server) provides a service to the customers, it allows them to exchange money for goods. Customers (clients) come in and can buy stuff in the store. There are many different types of customers want to do different things and are interested in different problems.