в терминологии списков из Си/С++, __proto__ - это тот самый "next" - ссылка на след. элемент списка прототипов, нулевой в конце.
А prototype - это ссылка на цепочку прототипов, которая есть в функции. При создании объекта через new у этого объекта __proto__ будет ссылаться на ту цепочку, на которую ссылается prototype у функции (на момент вызова new).
function F(){}
var obj = new F();
obj.__proto__ === F.prototype; // true