Ubuntu – What’s the difference between xxxx-client and xxxx-server packages

aptclientMySQLpackage-managementserver

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.

Best Answer

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.