I see that in scikit-learn I can build an SVM classifier with the linear kernel in at last 3 different ways:

LinearSVC

SVC with kernel='linear' parameter

Stochastic Gradient Descent with loss='hinge' parameter

Now, I see that the difference between the first two classifiers is that the former is implemented in terms of liblinear and the latter in terms of libsvm.

How the first two classifiers differ from the third one?