Bring 4quarts water to a boil in a large covered pot. Add the beans, reduce the heat to medium, and cook, uncovered, for 30 minutes, stirring frequently.
Add the onion, garlic, olive oil, thyme, bay leaf, basil, carrots, celery, parsley, butter, and cabbage. Bring to a boil, then reduce the heat to low and simmer for 1½ hours, stirring frequently, until the beans are nearly tender.
Add the potatoes, salt, and pepper. Continue simmering for 30-45 minutes, until the beans are very soft and the soup is thick. Taste for seasoning.