Your original posted code does not work as in the illustration. The function f and y are missing their arguments.

The reason it wouldn't work with f and y is that Manipulate localizes x0. This means the x0 symbol in the definition of y is a different symbol than the x0 in Manipulate.

Here's a way to get what seems intended:

f[x_] = x^2;

y[x_, x0_] = f[x0] + f'[x0]*(x - x0);

Manipulate[Plot[{y[x, x0], f[x]}, {x, -4, 10}], {x0, 0, 6}]