
                                      1515
                                   THE PRINCE
                             by Nicolo Machiavelli
                          translated by W. K. Marriott
                              CHAPTER I
             HOW MANY KINDS OF PRINCIPALITIES THERE ARE,
                 AND BY WHAT MEANS THEY ARE ACQUIRED

  ALL STATES, all powers, that have held and hold rule over men have
been and are either republics or principalities.
  Principalities are either hereditary, in which the family has been
long established; or they are new.
  The new are either entirely new, as was Milan to Francesco Sforza,
or they are, as it were, members annexed to the hereditary state of
the prince who has acquired them, as was the kingdom of Naples to that
of the King of Spain.
  Such dominions thus acquired are either accustomed to live under a
prince, or to live in freedom; and are acquired either by the arms
of the prince himself, or of others, or else by fortune or by ability.
                              CHAPTER II
                 CONCERNING HEREDITARY PRINCIPALITIES

  I WILL leave out all discussion on republics, inasmuch as in another
place I have written of them at length, and will address myself only
to principalities. In doing so I will keep to the order indicated
above, and discuss how such principalities are to be ruled and
preserved.
  I say at once there are fewer difficulties in holding hereditary
states, and those long accustomed to the family of their prince,
than new ones; for it is sufficient only not to transgress the customs
of his ancestors, and to deal prudently with circumstances as they
arise, for a prince of average powers to maintain himself in his
state, unless he be deprived of it by some extraordinary and excessive
force; and if he should be so deprived of it, whenever anything
sinister happens to the usurper, he will regain it.
  We have in Italy, for example, the Duke of Ferrara, who could not
have withstood the attacks of the Venetians in '84, nor those of
Pope Julius in '10, unless he had been long established in his
dominions. For the hereditary prince has less cause and less necessity
to offend; hence it happens that he will be more loved; and unless
extraordinary vices cause him to be hated, it is reasonable to
expect that his subjects will be naturally well disposed towards
him; and in the antiquity and duration of his rule the memories and
motives that make for change are lost, for one change always leaves
the toothing for another.
                             CHAPTER III
                   CONCERNING MIXED PRINCIPALITIES

  BUT the difficulties occur in a new principality. And firstly, if it
be not entirely new, but is, as it were, a member of a state which,
taken collectively, may be called composite, the changes arise chiefly
from an inherent difficulty which there is in all new
principalities; for men change their rulers willingly, hoping to
better themselves, and this hope induces them to take up arms
against him who rules: wherein they are deceived, because they
afterwards find by experience they have gone from bad to worse. This
follows also on another natural and common necessity, which always
causes a new prince to burden those who have submitted to him with his
soldiery and with infinite other hardships which he must put upon
his new acquisition.
  In this way you have enemies in all those whom you have injured in
seizing that principality, and you are not able to keep those
friends who put you there because of your not being able to satisfy
them in the way they expected, and you cannot take strong measures
against them, feeling bound to them. For, although one may be very
strong in armed forces, yet in entering a province one has always need
of the goodwill of the natives.
  For these reasons Louis XII, King of France, quickly occupied Milan,
and as quickly lost it; and to turn him out the first time it only
needed Lodovico's own forces; because those who had opened the gates
to him, finding themselves deceived in their hopes of future
benefit, would not endure the ill-treatment of the new prince. It is
very true that, after acquiring rebellious provinces a second time,
they are not so lightly lost afterwards, because the prince, with
little reluctance, takes the opportunity of the rebellion to punish
the delinquents, to clear out the suspects, and to strengthen
himself in the weakest places. Thus to cause France to lose Milan
the first time it was enough for the Duke Lodovico to raise
insurrections on the borders; but to cause him to lose it a second
time it was necessary to bring the whole world against him, and that
his armies should be defeated and driven out of Italy; which
followed from the causes above mentioned.
  Nevertheless Milan was taken from France both the first and the
second time. The general reasons for the first have been discussed; it
remains to name those for the second, and to see what resources he
had, and what any one in his situation would have had for
maintaining himself more securely in his acquisition than did the King
of France.
  Now I say that those dominions which, when acquired, are added to an
ancient state by him who acquires them, are either of the same country
and language, or they are not. When they are, it is easier to hold
them, especially when they have not been accustomed to
self-government; and to hold them securely it is enough to have
destroyed the family of the prince who was ruling them; because the
two peoples, preserving in other things the old conditions, and not
being unlike in customs, will live quietly together, as one has seen
in Brittany, Burgundy, Gascony, and Normandy, which have been bound to
France for so long a time: and, although there may be some
difference in language, nevertheless the customs are alike, and the
people will easily be able to get on amongst themselves. He who has
annexed them, if he wishes to hold them, has only to bear in mind
two considerations: the one, that the family of their former lord is
extinguished; the other, that neither their laws nor their taxes are
altered, so that in a very short time they will become entirely one
body with the old principality.
  But when states are acquired in a country differing in language,
customs, or laws, there are difficulties, and good fortune and great
energy are needed to hold them, and one of the greatest and most
real helps would be that he who has acquired them should go and reside
there. This would make his position more secure and durable, as it has
made that of the Turk in Greece, who, notwithstanding all the other
measures taken by him for holding that state, if he had not settled
there, would not have been able to keep it. Because, if one is on
the spot, disorders are seen as they spring up, and one can quickly
remedy them; but if one is not at hand, they heard of only when they
are one can no longer remedy them. Besides this, the country is not
pillaged by your officials; the subjects are satisfied by prompt
recourse to the prince; thus, wishing to be good, they have more cause
to love him, and wishing to be otherwise, to fear him. He who would
attack that state from the outside must have the utmost caution; as
long as the prince resides there it can only be wrested from him
with the greatest difficulty.
  The other and better course is to send colonies to one or two
places, which may be as keys to that state, for it necessary either to
do this or else to keep there a great number of cavalry and
infantry. A prince does not spend much on colonies, for with little or
no expense he can send them out and keep them there, and he offends
a minority only of the citizens from whom he takes lands and houses to
give them to the new inhabitants; and those whom he offends, remaining
poor and scattered, are never able to injure him; whilst the rest
being uninjured are easily kept quiet, and at the same time are
anxious not to err for fear it should happen to them as it has to
those who have been despoiled. In conclusion, I say that these
colonies are not costly, they are more faithful, they injure less, and
the injured, as has been said, I being poor and scattered, cannot
hurt. Upon this, one has to remark that men ought either to be well
treated or crushed, because they can avenge themselves of lighter
injuries, of more serious ones they cannot; therefore the injury
that is to be done to a man ought to be of such a kind that one does
not stand in fear of revenge.
  But in maintaining armed men there in place of colonies one spends
much more, having to consume on the garrison all income from the
state, so that the acquisition turns into a loss, and many more are
exasperated, because the whole state is injured; through the
shifting of the garrison up and down all become acquainted with
hardship, and all become hostile, and they are enemies who, whilst
beaten on their own ground, are yet able to do hurt. For every reason,
therefore, such guards are as useless as a colony is useful.
  Again, the prince who holds a country differing in the above
respects ought to make himself the head and defender of his powerful
neighbours, and to weaken the more powerful amongst them, taking
care that no foreigner as powerful as himself shall, by any
accident, get a footing there; for it will always happen that such a
one will be introduced by those who are discontented, either through
excess of ambition or through fear, as one has seen already. The
Romans were brought into Greece by the Aetolians; and in every other
country where they obtained a footing they were brought in by the
inhabitants. And the usual course of affairs is that, as soon as a
powerful foreigner enters a country, all the subject states are
drawn to him, moved by the hatred which they feel against the ruling
power. So that in respect to these subject states he has not to take
any trouble to gain them over to himself, for the whole of them
quickly rally to the state which he has acquired there. He has only to
take care that they do not get hold of too much power and too much
authority, and then with his own forces, and with their goodwill, he
can easily keep down the more powerful of them, so as to remain
entirely master in the country. And he who does not properly manage
this business will soon lose what he has acquired, and whilst he
does hold it he will have endless difficulties and troubles.
  The Romans, in the countries which they annexed, observed closely
these measures; they sent colonies and maintained friendly relations
with the minor powers, without increasing their strength; they kept
down the greater, and did not allow any strong foreign powers to
gain authority. Greece appears to me sufficient for an example. The
Achaeans and Aetolians were kept friendly by them, the kingdom of
Macedonia was humbled, Antiochus was driven out; yet the merits of the
Achaeans and Aetolians never secured for them permission to increase
their power, nor did the persuasions of Philip ever induce the
Romans to be his friends without first humbling him, nor did the
influence of Antiochus make them agree that he should retain any
lordship over the country. Because the Romans did in these instances
what all prudent princes ought to do, who have to regard not only
present troubles, but also future ones, for which they must prepare
with every energy, because, when foreseen, it is easy to remedy
them; but if you wait until they approach, the medicine is no longer
in time because the malady has become incurable; for it happens in
this, as the physicians say it happens in hectic fever, that in the
beginning of the malady it is easy to cure but difficult to detect,
but in the course of time, not having been either detected or
treated in the beginning, it becomes easy to detect but difficult to
cure. Thus it happens in affairs of state, for when the evils that
arise have been foreseen (which it is only given to a wise man to
see), they can be quickly redressed, but when, through not having been
foreseen, they have been permitted to grow in a way that every one can
see them. there is no longer a remedy. Therefore, the Romans,
foreseeing troubles, dealt with them at once, and, even to avoid a
war, would not let them come to a head, for they knew that war is
not to be avoided, but is only put off to the advantage of others;
moreover they wished to fight with Philip and Antiochus in Greece so
as not to have to do it in Italy; they could have avoided both, but
this they did not wish; nor did that ever please them which is for
ever in the mouths of the wise ones of our time:- Let us enjoy the
benefits of the time- but rather the benefits of their own valour
and prudence, for time drives everything before it, and is able to
bring with it good as well as evil, and evil as well as good.
  But let us turn to France and inquire whether she has done any of
the things mentioned. I will speak of Louis [XII] (and not of
Charles [VIII]) as the one whose conduct is the better to be observed,
he having held possession of Italy for the longest period; and you
will see that he has done the opposite to those things which ought
to be done to retain a state composed of divers elements.
  King Louis was brought into Italy by the ambition of the
Venetians, who desired to obtain half the state of Lombardy by his
intervention. I will not blame the course taken by the king,
because, wishing to get a foothold in Italy, and having no friends
there- seeing rather that every door was shut to him owing to the
conduct of Charles- he was forced to accept those friendships which he
could get, and he would have succeeded very quickly in his design if
in other matters he had not made some mistakes. The king, however,
having acquired Lombardy, regained at once the authority which Charles
had lost: Genoa yielded; the Florentines became his friends; the
Marquess of Mantua, the Duke of Ferrara, the Bentivoglio, my lady of
Forli, the Lords of Faenza, of Pesaro, of Rimini, of Camerino, of
Piombino, the Lucchesi, the Pisans, the Sienese- everybody made
advances to him to become his friend. Then could the Venetians realize
the rashness of the course taken by them, which, in order that they
might secure two towns in Lombardy, had made the king master of
two-thirds of Italy.
  Let any one now consider with what little difficulty the king
could have maintained his position in Italy had he observed the
rules above laid down, and kept all his friends secure and
protected; for although they were numerous they were both weak and
timid, some afraid of the Church, some of the Venetians, and thus they
would always have been forced to stand in with him, and by their means
he could easily have made himself secure against those who remained
powerful. But he was no sooner in Milan than he did the contrary by
assisting Pope Alexander to occupy the Romagna. It never occurred to
him that by this action he was weakening himself, depriving himself of
friends and those who had thrown themselves into his lap, whilst he
aggrandized the Church by adding much temporal power to the spiritual,
thus giving it great authority. And having committed this prime error,
he was obliged to follow it up, so much so that, to put an end to
the ambition of Alexander, and to prevent his becoming the master of
Tuscany, he was himself forced to come into Italy.
  And as if it were not enough to have aggrandized the Church, and
deprived himself friends, he, wishing to have the kingdom of Naples,
divides it with the King of Spain, and where he was the prime
arbiter of Italy he takes an associate, so that the ambitious of
that country and the malcontents of his own should have where to
shelter; and whereas he could have left in the kingdom his own
pensioner as king, he drove him out, to put one there who was able
to drive him, Louis, out in turn.
  The wish to acquire is in truth very natural and common, and men
always do so when they can, and for this they will be praised not
blamed; but when they cannot do so, yet wish to do so by any means,
then there is folly and blame. Therefore, if France could have
attacked Naples with her own forces she ought to have done so; if
she could not, then she ought not to have divided it. And if the
partition which she made with the Venetians in Lombardy was
justified by the excuse that by it she got a foothold in Italy, this
other partition merited blame, for it had not the excuse of that
necessity.
  Therefore Louis made these five errors: he destroyed the minor
powers, he increased the strength of one of the greater powers in
Italy, he brought in a foreign power, he did not settle in the
country, he did not send colonies. Which errors, if he had lived, were
not enough to injure him had he not made a sixth by taking away
their dominions from the Venetians; because, had he not aggrandized
the Church, nor brought Spain into Italy, it would have been very
reasonable and necessary to humble them; but having first taken
these steps, he ought never to have consented to their ruin, for they,
being powerful, would always have kept off others from designs on
Lombardy, to which the Venetians would never have consented except
to become masters themselves there; also because the others would
not wish to take Lombardy from France in order to give it to the
Venetians, and to run counter to both they would not have had the
courage.
  And if any one should say: King Louis yielded the Romagna to
Alexander and the kingdom to Spain to avoid war, I answer for the
reasons given above that a blunder ought never be perpetrated to avoid
war, because it is not to be avoided, but is only deferred to your
disadvantage. And if another should allege the pledge which the king
had given to the Pope that he would assist him in the enterprise, in
exchange for the dissolution of his marriage and for the hat to Rouen,
to that I reply what I shall write later on concerning the faith of
princes, and how it ought to be kept.
  Thus King Louis lost Lombardy by not having followed any of the
conditions observed by those who have taken possession of countries
and wished to retain them. Nor is there any miracle in this, but
much that is reasonable and quite natural. And on these matters I
spoke at Nantes with Rouen, when Valentino,* as Cesare Borgia, the son
of Pope Alexander, was usually called, occupied the Romagna, and on
Cardinal Rouen observing to me that the Italians did not understand
war, I replied to him that the French did not understand statecraft,
meaning that otherwise they would not have allowed the Church to reach
such greatness. And in fact it has been seen that the greatness of the
Church and of Spain in Italy has been caused by France, and her ruin
may be attributed to them. From this a general rule is drawn which
never or rarely fails: that he who is the cause of another becoming
powerful is ruined; because that predominancy has been brought about
either by astuteness or else by force, and both are distrusted by
him who has been raised to power.

  * So called- in Italian- from the duchy of Valentinois, conferred on
him by Louis XII.
                              CHAPTER IV
          WHY THE KINGDOM OF DARIUS, CONQUERED BY ALEXANDER,
    DID NOT REBEL AGAINST THE SUCCESSORS OF ALEXANDER AT HIS DEATH

  CONSIDERING the difficulties which men have had to hold a newly
acquired state, some might wonder how, seeing that Alexander the Great
became the master of Asia in a few years, and died whilst it was yet
scarcely settled (whence it might appear reasonable that the whole
empire would have rebelled), nevertheless his successors maintained
themselves, and had to meet no other difficulty than that which
arose among themselves from their own ambitions.
  I answer that the principalities of which one has record are found
to be governed in two different ways: either by a prince, with a
body of servants, who assist him to govern the kingdom as ministers by
his favour and permission; or by a prince and barons, who hold that
dignity by antiquity of blood and not by the grace of the prince. Such
barons have states and their own subjects, who recognize them as lords
and hold them in natural affection. Those states that are governed
by a prince and his servants hold their prince in more
consideration, because in all the country there is no one who is
recognized as superior to him, and if they yield obedience to
another they do it as to a minister and official, and they do not bear
him any particular affection.
  The examples of these two governments in our time are the Turk and
the King of France. The entire monarchy of the Turk is governed by one
lord, the others are his servants; and, dividing his kingdom into
sanjaks, he sends there different administrators, and shifts and
changes them as he chooses. But the King of France is placed in the
midst of an ancient body of lords, acknowledged by their own subjects,
and beloved by them; they have their own prerogatives, nor can the
king take these away except at his peril. Therefore, he who
considers both of these states will recognize great difficulties in
seizing the state of the Turk, but, once it is conquered, great ease
in holding it. The causes of the difficulties in seizing the kingdom
of the Turk are that the usurper cannot be called in by the princes of
the kingdom, nor can he hope to be assisted in his designs by the
revolt of those whom the lord has around him. This arises from the
reasons given above; for his ministers, being all slaves and
bondmen, can only be corrupted with great difficulty, and one can
expect little advantage from them when they have been corrupted, as
they cannot carry the people with them, for the reasons assigned.
Hence, he who attacks the Turk must bear in mind that he will find him
united, and he will have to rely more on his own strength than on
the revolt of others; but, if once the Turk has been conquered, and
routed in the field in such a way that he cannot replace his armies,
there is nothing to fear but the family of the prince, and, this being
exterminated, there remains no one to fear, the others having no
credit with the people; and as the conqueror did not rely on them
before his victory, so he ought not to fear them after it.
  The contrary happens in kingdoms governed like that of France,
because one can easily enter there by gaining over some baron of the
kingdom, for one always finds malcontents and such as desire a change.
Such men, for the reasons given, can open the way into the state and
render the victory easy; but if you wish to hold it afterwards, you
meet with infinite difficulties, both from those who have assisted you
and from those you have crushed. Nor is it enough for you to have
exterminated the family of the prince, because the lords that remain
make themselves the heads of fresh movements against you, and as you
are unable either to satisfy or exterminate them, that state is lost
whenever time brings the opportunity.
  Now if you will consider what was the nature of the government of
Darius, you will find it similar to the kingdom of the Turk, and
therefore it was only necessary for Alexander, first to overthrow
him in the field, and then to take the country from him. After which
victory, Darius being killed, the state remained secure to
Alexander, for the above reasons. And if his successors had been
united they would have enjoyed it securely and at their ease, for
there were no tumults raised in the kingdom except those they provoked
themselves.
  But it is impossible to hold with such tranquillity states
constituted like that of France. Hence arose those frequent rebellions
against the Romans in Spain, France, and Greece, owing to the many
principalities there were in these states, of which, as long as the
memory of them endured, the Romans always held an insecure possession;
but with the power and long continuance of the empire the memory of
them passed away, and the Romans then became secure possessors. And
when fighting afterwards amongst themselves, each one was able to
attach to himself his own parts of the country, according to the
authority he had assumed there; and the family of the former lord
being exterminated, none other than the Romans were acknowledged.
  When these things are remembered no one will marvel at the ease with
which Alexander held the Empire of Asia, or at the difficulties
which others have had to keep an acquisition, such as Pyrrhus and many
more; this is not occasioned by the little or abundance of ability
in the conqueror, but by the want of uniformity in the subject state.
                              CHAPTER V
     CONCERNING THE WAY TO GOVERN CITIES OR PRINCIPALITIES WHICH
         LIVED UNDER THEIR OWN LAWS BEFORE THEY WERE ANNEXED

  WHENEVER those states which have been acquired as stated have been
accustomed to live under their own laws and in freedom, there are
three courses for those who wish to hold them: the first is to ruin
them, the next is to reside there in person, the third is to permit
them to live under their own laws, drawing a tribute, and establishing
within it an oligarchy which will keep it friendly to you. Because
such a government, being created by the prince, knows that it cannot
stand without his friendship and interest, and does its utmost to
support him; and therefore he who would keep a city accustomed to
freedom will hold it more easily by the means of its own citizens than
in any other way.
  There are, for example, the Spartans and the Romans. The Spartans
held Athens and Thebes, establishing there an oligarchy,
nevertheless they lost them. The Romans, in order to hold Capua,
Carthage, and Numantia, dismantled them, and did not lose them. They
wished to hold Greece as the Spartans held it, making it free and
permitting its laws, and did not succeed. So to hold it they were
compelled to dismantle many cities in the country, for in truth
there is no safe way to retain them otherwise than by ruining them.
And he who becomes master of a city accustomed to freedom and does not
destroy it, may expect to be destroyed by it, for in rebellion it
has always the watch-word of liberty and its ancient privileges as a
rallying point, which neither time nor benefits will ever cause it
to forget. And what ever you may do or provide against, they never
forget that name or their privileges unless they are disunited or
dispersed but at every chance they immediately rally to them, as
Pisa after the hundred years she had been held in bondage by the
Florentines.
  But when cities or countries are accustomed to live under a
prince, and his family is exterminated, they, being on the one hand
accustomed to obey and on the other hand not having the old prince,
cannot agree in making one from amongst themselves, and they do not
know how to govern themselves. For this reason they are very slow to
take up arms, and a prince can gain them to himself and secure them
much more easily. But in republics there is more vitality, greater
hatred, and more desire for vengeance, which will never permit them to
allow the memory of their former liberty to rest; so that the safest
way is to destroy them or to reside there.
                              CHAPTER VI
           CONCERNING NEW PRINCIPALITIES WHICH ARE ACQUIRED
                    BY ONE'S OWN ARMS AND ABILITY

  LET no one be surprised if, in speaking of entirely new
principalities as I shall do, I adduce the highest examples both of
prince and of state; because men, walking almost always in paths
beaten by others, and following by imitation their deeds, are yet
unable to keep entirely to the ways of others or attain to the power
of those they imitate. A wise man ought always to follow the paths
beaten by great men, and to imitate those who have been supreme, so
that if his ability does not equal theirs, at least it will savour
of it. Let him act like the clever archers who, designing to hit the
mark which yet appears too far distant, and knowing the limits to
which the strength of their bow attains, take aim much higher than the
mark, not to reach by their strength or arrow to so great a height,
but to be able with the aid of so high an aim to hit the mark they
wish to reach.
  I say, therefore, that in entirely new principalities, where there
is a new prince, more or less difficulty is found in keeping them,
accordingly as there is more or less ability in him who has acquired
the state. Now, as the fact of becoming a prince from a private
station presupposes either ability or fortune, it is clear that one or
other of these two things will mitigate in some degree many
difficulties. Nevertheless, he who has relied least on fortune is
established the strongest. Further, it facilitates matters when the
prince, having no other state, is compelled to reside there in person.
  But to come to those who, by their own ability and not through
fortune, have risen to be princes, I say that Moses, Cyrus, Romulus,
Theseus, and such like are the most excellent examples. And although
one may not discuss Moses, he having been a mere executor of the
will of God, yet he ought to be admired, if only for that favour which
made him worthy to speak with God. But in considering Cyrus and others
who have acquired or founded kingdoms, all will be found admirable;
and if their particular deeds and conduct shall be considered, they
will not be found inferior to those of Moses, although he had so great
a preceptor. And in examining their actions and lives one cannot see
that they owed anything to fortune beyond opportunity, which brought
them the material to mould into the form which seemed best to them.
Without that opportunity their powers of mind would have been
extinguished, and without those powers the opportunity would have come
in vain.
  It was necessary, therefore, to Moses that he should find the people
of Israel in Egypt enslaved and oppressed by the Egyptians, in order
that they should be disposed to follow him so as to be delivered out
of bondage. It was necessary that Romulus should not remain in Alba,
and that he should be abandoned at his birth, in order that he
should become King of Rome and founder of the fatherland. It was
necessary that Cyrus should find the Persians discontented with the
government of the Medes, and the Medes soft and effeminate through
their long peace. Theseus could not have shown his ability had he
not found the Athenians dispersed. These opportunities, therefore,
made those men fortunate, and their high ability enabled them to
recognize the opportunity whereby their country was ennobled and
made famous.
  Those who by valorous ways become princes, like these men, acquire a
principality with difficulty, but they it with ease. The
difficulties they have in acquiring it arise in part from the new
rules and methods which they are forced to introduce to establish
their government and its security. And it ought to be remembered
that there is nothing more difficult to take in hand, more perilous to
conduct, or more uncertain in its success, than to take the lead in
the introduction of a new order of things. Because the innovator has
for enemies all those who have done well under the old conditions, and
lukewarm defenders in those who may do well under the new. This
coolness arises partly from fear of the opponents, who have the laws
on their side, and partly from the incredulity of men, who do not
readily believe in new things until they have had a long experience of
them. Thus it happens that whenever those who are hostile have the
opportunity to attack they do it like partisans, whilst the others
defend lukewarmly, in such wise that the prince is endangered along
with them.
  It is necessary, therefore, if we desire to discuss this matter
thoroughly, to inquire whether these innovators can rely on themselves
or have to depend on others: that is to say, whether, to consummate
their enterprise, have they to use prayers or can they use force? In
the first instance they always succeed badly, and never compass
anything; but when they can rely on themselves and use force, then
they are rarely endangered. Hence it is that all armed prophets have
conquered, and the unarmed ones have been destroyed. Besides the
reasons mentioned, the nature of the people is variable, and whilst it
is easy to persuade them, it is difficult to fix them in that
persuasion. And thus it is necessary to take such measures that,
when they believe no longer, it may be possible to make them believe
by force.
  If Moses, Cyrus, Theseus, and Romulus had been unarmed they could
not have enforced their constitutions for long- as happened in our
time to Fra Girolamo Savonarola, who was ruined with his new order
of things immediately the multitude believed in him no longer, and
he had no means of keeping steadfast those who believed or of making
the unbelievers to believe. Therefore such as these have great
difficulties in consummating their enterprise, for all their dangers
are in the ascent, yet with ability they will overcome them; but
when these are overcome, and those who envied them their success are
exterminated, they will begin to be respected, and they will
continue afterwards powerful, secure, honoured, and happy.
  To these great examples I wish to add a lesser one; still it bears
some resemblance to them, and I wish it to suffice me for all of a
like kind: it is Hiero the Syracusan. This man rose from a private
station to be Prince of Syracuse, nor did he, either, owe anything
to fortune but opportunity; for the Syracusans, being oppressed, chose
him for their captain, afterwards he was rewarded by being made
their prince. He was of so great ability, even as a private citizen,
that one who writes of him says he wanted nothing but a kingdom to
be a king. This man abolished the old soldiery, organized the new,
gave up old alliances, made new ones; and as he had his own soldiers
and allies, on such foundations he was able to build any edifice:
thus, whilst he had endured much trouble in acquiring, he had but
little in keeping.
                             CHAPTER VII
           CONCERNING NEW PRINCIPALITIES WHICH ARE ACQUIRED
           EITHER BY THE ARMS OF OTHERS OR BY GOOD FORTUNE

  THOSE who solely by good fortune become princes from being private
citizens have little trouble in rising, but much in keeping atop; they
have not any difficulties on the way up, because they fly, but they
have many when they reach the summit. Such are those to whom some
state is given either for money or by the favour of him who bestows
it; as happened to many in Greece, in the cities of Ionia and of the
Hellespont, where princes were made by Darius, in order that they
might hold the cities both for his security and his glory; as also
were those emperors who, by the corruption of the soldiers, from being
citizens came to empire. Such stand simply upon the goodwill and the
fortune of him who has elevated them- two most inconstant and unstable
things. Neither have they the knowledge requisite for the position;
because, unless they are men of great worth and ability, it is not
reasonable to expect that they should know how to command, having
always lived in a private condition; besides, they cannot hold it
because they have not forces which they can keep friendly and
faithful.
  States that rise unexpectedly, then, like all other things in nature
which are born and grow rapidly, cannot have their foundations and
relations with other states fixed in such a way that the first storm
will not overthrow them; unless, as is said, those who unexpectedly
become princes are men of so much ability that they know they have
to be prepared at once to hold that which fortune has thrown into
their laps, and that those foundations, which others have laid
before they became princes, they must lay afterwards.
  Concerning these two methods of rising to be a prince by ability
or fortune, I wish to adduce two examples within our own recollection,
and these are Francesco Sforza and Cesare Borgia. Francesco, by proper
means and with great ability, from being a private person rose to be
Duke of Milan, and that which he had acquired with a thousand
anxieties he kept with little trouble. On the other hand, Cesare
Borgia, called by the people Duke Valentino, acquired his state during
the ascendancy of his father, and on its decline he lost it,
notwithstanding that he had taken every measure and done all that
ought to be done by a wise and able man to fix firmly his roots in the
states which the arms and fortunes of others had bestowed on him.
  Because, as is stated above, he who has not first laid his
foundations may be able with great ability to lay them afterwards, but
they will be laid with trouble to the architect and danger to the
building. If, therefore, all the steps taken by the duke be
considered, it will be seen that he laid solid foundations for his
future power, and I do not consider it superfluous to discuss them,
because I do not know what better precepts to give a new prince than
the example of his actions; and if his dispositions were of no
avail, that was not his fault, but the extraordinary and extreme
malignity of fortune.
  Alexander VI, in wishing to aggrandize the duke, his son, had many
immediate and prospective difficulties. Firstly, he did not see his
way to make him master of any state that was not a state of the
Church; and if he was willing to rob the Church he knew that the
Duke of Milan and the Venetians would not consent, because Faenza
and Rimini were already under the protection of the Venetians. Besides
this, he saw the arms of Italy, especially those by which he might
have been assisted, in hands that would fear the aggrandizement of the
Pope, namely, the Orsini and the Colonna and their following. It
behoved him, therefore, to upset this state of affairs and embroil the
powers, so as to make himself securely master of part of their states.
This was easy for him to do, because he found the Venetians, moved
by other reasons, inclined to bring back the French into Italy; he
would not only not oppose this, but he would render it more easy by
dissolving the former marriage of King Louis. Therefore the king
came into Italy with the assistance of the Venetians and the consent
of Alexander. He was no sooner in Milan than the Pope had soldiers
from him for the attempt on the Romagna, which yielded to him on the
reputation of the king. The duke, therefore, having acquired the
Romagna and beaten the Colonna, while wishing to hold that and to
advance further, was hindered by two things: the one, his forces did
not appear loyal to him, the other, the goodwill of France: that is to
say, he feared that the forces of the Orsini, which was using, would
not stand to him, that not only might they hinder him from winning
more, but might themselves seize what he had won, and that the King
might also do the same. Of the Orsini he had a warning when, after
taking Faenza and attacking Bologna, he saw them go very unwillingly
to that attack. And as to the king, he learned his mind when he
himself, after taking the duchy of Urbino, attacked Tuscany, and the
king made him desist from that undertaking; hence the duke decided
to depend no more upon the arms and the luck of others.
  For the first thing he weakened the Orsini and Colonna parties in
Rome, by gaining to himself all their adherents who were gentlemen,
making them his gentlemen, giving them good pay, and, according to
their rank, honouring them with office and command in such a way
that in a few months all attachment to the factions was destroyed
and turned entirely to the duke. After this he awaited an
opportunity to crush the Orsini, having scattered the adherents of the
Colonna. This came to him soon and he used it well; for the Orsini,
perceiving at length that the aggrandizement of the duke and the
Church was ruin to them, called a meeting at Magione, in the territory
of Perugia. From this sprung the rebellion at Urbino and the tumults
in the Romagna, with endless dangers to the duke, all of which he
overcame with the help of the French. Having restored his authority,
not to leave it at risk by trusting either to the French or other
outside forces, he had recourse to his wiles, and he knew so well
how to conceal his mind that, by the mediation of Signor Paolo
[Orsini]- whom the duke did not fail to secure with all kinds of
attention, giving him money, apparel, and horses- the Orsini were
reconciled, so that their simplicity brought them into his power at
Sinigaglia. Having exterminated the leaders, and turned their
partisans into his friends, the duke had laid sufficiently good
foundations to his power, having all the Romagna and the duchy of
Urbino; and the people now beginning to appreciate their prosperity,
he gained them all over to himself. And as this point is worthy of
notice, and to be imitated by others, I am not willing to leave it
out.
  When the duke occupied the Romagna he found it under the rule of
weak masters, who rather plundered their subjects than ruled them, and
gave them more cause for disunion than for union, so that the
country was full of robbery, quarrels, and every kind of violence; and
so, wishing to bring back peace and obedience to authority, he
considered it necessary to give it a good governor. Thereupon he
promoted Messer Ramiro d'Orco [de Lorqua], a swift and cruel man, to
whom he gave the fullest power. This man in a short time restored
peace and unity with the greatest success. Afterwards the duke
considered that it was not advisable to confer such excessive
authority, for he had no doubt but that he would become odious, so
he set up a court of judgment in the country, under a most excellent
president, wherein all cities had their advocates. And because he knew
that the past severity had caused some hatred against himself, so,
to clear himself in the minds of the people, and gain them entirely to
himself, he desired to show that, if any cruelty had been practised,
it had not originated with him, but in the natural sternness of the
minister. Under this pretence he took Ramiro, and one morning caused
him to be executed and left on the piazza at Cesena with the block and
a bloody knife at his side. The barbarity of this spectacle caused the
people to be at once satisfied and dismayed.
  But let us return whence we started. I say that the duke, finding
himself now sufficiently powerful and partly secured from immediate
dangers by having armed himself in his own way, and having in a
great measure crushed those forces in his vicinity that could injure
him if he wished to proceed with his conquest, had next to consider
France, for he knew that the king, who too late was aware of his
mistake, would not support him. And from this time he began to seek
new alliances and to temporize with France in the expedition which she
was making towards the kingdom of Naples against the Spaniards who
were besieging Gaeta. It was his intention to secure himself against
them, and this he would have quickly accomplished had Alexander lived.
  Such was his line of action as to present affairs. But as to the
future he had to fear, in the first place, that a new successor to the
Church might not be friendly to him and might seek to take from him
that which Alexander had given him, so he decided to act in four ways.
Firstly, by exterminating the families of those lords whom he had
despoiled, so as to take away that pretext from the Pope. Secondly, by
winning to himself all the gentlemen of Rome, so as to be able to curb
the Pope with their aid, as has been observed. Thirdly, by
converting the college more to himself. Fourthly, by acquiring so much
power before the Pope should die that he could by his own measures
resist the first shock. Of these four things, at the death of
Alexander, he had accomplished three. For he had killed as many of the
dispossessed lords as he could lay hands on, and few had escaped; he
had won over the Roman gentlemen, and he had the most numerous party
in the college. And as to any fresh acquisition, he intended to become
master of Tuscany, for he already possessed Perugia and Piombino,
and Pisa was under his protection. And as he had no longer to study
France (for the French were already driven out of the kingdom of
Naples by the Spaniards, and in this way both were compelled to buy
his goodwill), he pounced down upon Pisa. After this, Lucca and
Siena yielded at once, partly through hatred and partly through fear
of the Florentines; and the Florentines would have had no remedy had
he continued to prosper, as he was prospering the year that
Alexander died, for he had acquired so much power and reputation
that he would have stood by himself, and no longer have depended on
the luck and the forces of others, but solely on his own power and
ability.
  But Alexander died five years after he had first drawn the sword. He
left the duke with the state of Romagna alone consolidated, with the
rest in the air, between two most powerful hostile armies, and sick
unto death. Yet there were in the duke such boldness and ability,
and he knew so well how men are to be won or lost, and so firm were
the foundations which in so short a time he had laid, that if he had
not had those armies on his back, or if he had been in good health, he
would have overcome all difficulties. And it is seen that his
foundations were good, for the Romagna awaited him for more than a
month. In Rome, although but half alive, he remained secure; and
whilst the Baglioni, the Vitelli, and the Orsini might come to Rome,
they could not effect anything against him. If he could not have
made Pope him whom he wished, at least the one whom he did not wish
would not have been elected. But if he had been in sound health at the
death of Alexander, everything would have been easy to him. On the day
that Julius II was elected, he told me that he had thought of
everything that might occur at the death of his father, and had
provided a remedy for all, except that he had never anticipated
that, when the death did happen, he himself would be on the point to
die.
  When all the actions of the duke are recalled, I do not know how
to blame him, but rather it appears to me, as I have said, that I
ought to offer him for imitation to all those who, by the fortune or
the arms of others, are raised to government. Because he, having a
lofty spirit and far-reaching aims, could not have regulated his
conduct otherwise, and only the shortness of the life of Alexander and
his own sickness frustrated his designs. Therefore, he who considers
it necessary to secure himself in his new principality, to win
friends, to overcome either by force or fraud, to make himself beloved
and feared by the people, to be followed and revered by the
soldiers, to exterminate those who have power or reason to hurt him,
to change the old order of things for new, to be severe and
gracious, magnanimous and liberal, to destroy a disloyal soldiery
and to create new, to maintain friendship with kings and princes in
such a way that they must help him with zeal and offend with
caution, cannot find a more lively example than the actions of this
man.
  Only can he be blamed for the election of Julius II, in whom he made
a bad choice, because, as is said, not being able to elect a Pope to
his own mind, he could have hindered any other from being elected
Pope; and he ought never to have consented to the election of any
cardinal whom he had injured or who had cause to fear him if they
became pontiffs. For men injure either from fear or hatred. Those whom
he had injured, amongst others, were San Pietro ad Vincula, Colonna,
San Giorgio, and Ascanio.* Any one of the others, on becoming Pope,
would have had to fear him, Rouen and the Spaniards excepted; the
latter from their relationship and obligations, the former from his
influence, the kingdom of France having relations with him. Therefore,
above everything, the duke ought to have created a Spaniard Pope, and,
failing him, he ought to have consented to Rouen and not San Pietro ad
Vincula. He who believes that new benefits will cause great personages
to forget old injuries is deceived. Therefore, the duke erred in his
choice, and it was the cause of his ultimate ruin.

  * Julius II had been Cardinal of San Pietro ad Vincula; San
Giorgio was Raffaells Riaxis, and Ascanio was Cardinal Ascanio Sforza.
                             CHAPTER VIII
          CONCERNING THOSE WHO HAVE OBTAINED A PRINCIPALITY
                            BY WICKEDNESS

  ALTHOUGH a prince may rise from a private station in two ways,
neither of which can be entirely attributed to fortune or genius,
yet it is manifest to me that I must not be silent on them, although
one could be more copiously treated when I discuss republics. These
methods are when, either by some wicked or nefarious ways, one ascends
to the principality, or when by the favour of his fellow-citizens a
private person becomes the prince of his country. And speaking of
the first method, it will be illustrated by two examples- one ancient,
the other modern- and without entering further into the subject, I
consider these two examples will suffice those who may be compelled to
follow them.
  Agathocles, the Sicilian, became King of Syracuse not only from a
private but from a low and abject position. This man, the son of a
potter, through all the changes in his fortunes always led an infamous
life. Nevertheless, he accompanied his infamies with so much ability
of mind and body that, having devoted himself to the military
profession, he rose through its ranks to be Praetor of Syracuse. Being
established in that position, and having deliberately resolved to make
himself prince and to seize by violence, without obligation to others,
that which had been conceded to him by assent, he came to an
understanding for this purpose with Hamilcar, the Carthaginian, who,
with his army, was fighting in Sicily. One morning he assembled the
people and senate of Syracuse, as if he had to discuss with them
things relating to the Republic, and at a given signal the soldiers
killed all the senators and the richest of the people; these dead,
he seized and held the princedom of that city without any civil
commotion. And although he was twice routed by the Carthaginians,
and ultimately besieged, yet not only was he able to defend his
city, but leaving part of his men for its defence, with the others
he attacked Africa, and in a short time raised the siege of
Syracuse. The Carthaginians, reduced to extreme necessity, were
compelled to come to terms with Agathocles, and, leaving Sicily to
him, had to be content with the possession of Africa.
  Therefore, he who considers the actions and the genius of this man
will see nothing, or little, which can be attributed to fortune,
inasmuch as he attained pre-eminence, as is shown above, not by the
favour of any one, but step by step in the military profession,
which steps were gained with a thousand troubles and perils, and
were afterwards boldly held by him with many hazards and dangers.
Yet it cannot be called talent to slay fellow-citizens, to deceive
friends, to be without faith, without mercy, without religion; such
methods may gain empire, but not glory. Still, if the courage of
Agathocles in entering into and extricating himself from dangers be
considered, together with his greatness of mind in enduring overcoming
hardships, it cannot be seen why he should be esteemed less than the
most notable captain. Nevertheless, his barbarous cruelty and
inhumanity with infinite wickednesses do not permit him to be
celebrated among the most excellent men. What he achieved cannot be
attributed either to fortune or to genius.
  In our times, during the rule of Alexander VI, Oliverotto da
Fermo, having been left an orphan many years before, was brought up by
his maternal uncle, Giovanni Fogliani, and in the early days of his
youth sent to fight under Paolo Vitelli, that, being trained under his
discipline, he might attain some high position in the military
profession. After Paolo died, he fought under his brother
Vitellozzo, and in a very short time, being endowed with wit and a
vigorous body and mind, he became the first man in his profession. But
it appearing to him a paltry thing to serve under others, he resolved,
with the aid of some citizens of Fermo, to whom the slavery of their
country was dearer than its liberty, and with the help of the Vitelli,
to seize Fermo. So he wrote to Giovanni Fogliani that, having been
away from home for many years, he wished to visit him and his city,
and in some measure to look into his patrimony; and although he had
not laboured to acquire anything except honour, yet, in order that the
citizens should see he had not spent his time in vain, he desired to
come honourably, so would be accompanied by one hundred horsemen,
his friends and retainers; and he entreated Giovanni to arrange that
he should be received honourably by the citizens of Fermo, all of
which would be not only to his honour, but also to that of Giovanni
himself, who had brought him up.
  Giovanni, therefore, did not fail in any attentions due to his
nephew, and he caused him to be honourably received by the Fermans,
and he lodged him in his own house, where, having passed some days,
and having arranged what was necessary for his wicked designs,
Oliverotto gave a solemn banquet to which he invited Giovanni Fogliani
and the chiefs of Fermo. When the viands and all the other
entertainments that are usual in such banquets were finished,
Oliverotto artfully began certain grave discourses, speaking of the
greatness of Pope Alexander and his son Cesare, and of their
enterprises, to which discourse Giovanni and others answered; but he
rose at once, saying that such matters ought to be discussed in a more
private place, and he betook himself to a chamber, whither Giovanni
and the rest of the citizens went in after him. No sooner were they
seated than soldiers issued from secret places and slaughtered
Giovanni and the rest. After these murders Oliverotto, mounted on
horseback, rode up and down the town and besieged the chief magistrate
in the palace, so that in fear the people were forced to obey him, and
to form a government, of which he made himself the prince. He killed
all the malcontents who were able to injure him, and strengthened
himself with new civil and military ordinances, in such a way that, in
the year during which he held the principality, not only was he secure
in the city of Fermo, but he had become formidable to all his
neighbours. And his destruction would have been as difficult as that
of Agathocles if he had not allowed himself to be overreached by
Cesare Borgia, who took him with the Orsini and Vitelli at Sinigaglia,
as was stated above. Thus one year after he had committed this
parricide, he was strangled, together with Vitellozzo, whom he had
made his leader in valour and wickedness.
  Some may wonder how it can happen that Agathocles, and his like,
after infinite treacheries and cruelties, should live for long
secure in his country, and defend himself from external enemies, and
never be conspired against by his own citizens; seeing that many
others, by means of cruelty, have never been able even in peaceful
times to hold the state, still less in the doubtful times of war. I
believe that this follows from severities being badly or properly
used. Those may be called properly used, if of evil it is lawful to
speak well, that are applied at one blow and are necessary to one's
security, and that are not persisted in afterwards unless they can
be turned to the advantage of the subjects. The badly employed are
those which, notwithstanding they may be few in the commencement,
multiply with time rather than decrease. Those who practise the
first system are able, by aid of God or man, to mitigate in some
degree their rule, as Agathocles did. It is impossible for those who
follow the other to maintain themselves.
  Hence it is to be remarked that, in seizing a state, the usurper
ought to examine closely into all those injuries which it is necessary
for him to inflict, and to do them all at one stroke so as not to have
to repeat them daily; and thus by not unsettling men he will be able
to reassure them, and win them to himself by benefits. He who does
otherwise, either from timidity or evil advice, is always compelled to
keep the knife in his hand; neither can he rely on his subjects, nor
can they attach themselves to him, owing to their continued and
repeated wrongs. For injuries ought to be done all at one time, so
that, being tasted less, they offend less; benefits ought to be
given little by little, so that the flavour of them may last longer.
  And above all things, a prince ought to live amongst his people in
such a way that no unexpected circumstances, whether of good or
evil, shall make him change; because if the necessity for this comes
in troubled times, you are too late for harsh measures; and mild
ones will not help you, for they will be considered as forced from
you, and no one will be under any obligation to you for them.
                              CHAPTER IX
                   CONCERNING A CIVIL PRINCIPALITY

  BUT coming to the other point- where a leading citizen becomes the
prince of his country, not by wickedness or any intolerable
violence, but by the favour of his fellow citizens- this may be called
a civil principality: nor is genius or fortune altogether necessary to
attain to it, but rather a happy shrewdness. I say then that such a
principality is obtained either by the favour of the people or by
the favour of the nobles. Because in all cities these two distinct
parties are found, and from this it arises that the people do not wish
to be ruled nor oppressed by the nobles, and the nobles wish to rule
and oppress the people; and from these two opposite desires there
arises in cities one of three results, either a principality,
self-government, or anarchy.
  A principality is created either by the people or by the nobles,
accordingly as one or other of them has the opportunity; for the
nobles, seeing they cannot withstand the people, begin to cry up the
reputation of one of themselves, and they make him a prince, so that
under his shadow they can give vent to their ambitions. The people,
finding they cannot resist the nobles, also cry up the reputation of
one of themselves, and make him a prince so as to be defended by his
authority. He who obtains sovereignty by the assistance of the
nobles maintains himself with more difficulty than he who comes to
it by the aid of the people, because the former finds himself with
many around him who consider themselves his equals, and because of
this he can neither rule nor manage them to his liking. But he who
reaches sovereignty by popular favour finds himself alone, and has
none around him, or few, who are not prepared to obey him.
  Besides this, one cannot by fair dealing, and without injury to
others, satisfy the nobles, but you can satisfy the people, for
their object is more righteous than that of the nobles, the latter
wishing to oppress, whilst the former only desire not to be oppressed.
It is to be added also that a prince can never secure himself
against a hostile people, because of their being too many, whilst from
the nobles he can secure himself, as they are few in number. The worst
that a prince may expect from a hostile people is to be abandoned by
them; but from hostile nobles he has not only to fear abandonment, but
also that they will rise against him; for they, being in these affairs
more far-seeing and astute, always come forward in time to save
themselves, and to obtain favours from him whom they expect to
prevail. Further, the prince is compelled to live always with the same
people, but he can do well without the same nobles, being able to make
and unmake them daily, and to give or take away authority when it
pleases him.
  Therefore, to make this point clearer, I say that the nobles ought
to be looked at mainly in two ways: that is to say, they either
shape their course in such a way as binds them entirely to your
fortune, or they do not. Those who so bind themselves, and are not
rapacious, ought to be honoured and loved; those who do not bind
themselves may be dealt with in two ways; they may fail to do this
through pusillanimity and a natural want of courage, in which case you
ought to make use of them, especially of those who are of good
counsel; and thus, whilst in prosperity you honour yourself, in
adversity you have not to fear them. But when for their own
ambitious ends they shun binding themselves, it is a token that they
are giving more thought to themselves than to you, and a prince
ought to guard against such, and to fear them as if they were open
enemies, because in adversity they always help to ruin him.
  Therefore, one who becomes a prince through the favour of the people
ought to keep them friendly, and this he can easily do seeing they
only ask not to be oppressed by him. But one who, in opposition to the
people, becomes a prince by the favour of the nobles, ought, above
everything, to seek to win the people over to himself, and this he may
easily do if he takes them under his protection. Because men, when
they receive good from him of whom they were expecting evil, are bound
more closely to their benefactor; thus the people quickly become
more devoted to him than if he had been raised to the principality
by their favours; and the prince can win their affections in many
ways, but as these vary according to the circumstances one cannot give
fixed rules, so I omit them; but, I repeat, it is necessary for a
prince to have the people friendly, otherwise he has no security in
adversity.
  Nabis, Prince of the Spartans, sustained the attack of all Greece,
and of a victorious Roman army, and against them he defended his
country and his government; and for the overcoming of this peril it
was only necessary for him to make himself secure against a few, but
this would not have been sufficient if the people had been hostile.
And do not let any one impugn this statement with the trite proverb
that 'He who builds on the people, builds on the mud,' for this is
true when a private citizen makes a foundation there, and persuades
himself that the people will free him when he is oppressed by his
enemies or by the magistrates; wherein he would find himself very
often deceived, as happened to the Gracchi in Rome and to Messer
Giorgio Scali in Florence. But granted a prince who has established
himself as above, who can command, and is a man of courage, undismayed
in adversity, who does not fail in other qualifications, and who, by
his resolution and energy, keeps the whole people encouraged- such a
one will never find himself deceived in them, and it will be shown
that he has laid his foundations well.
  These principalities are liable to danger when they are passing from
the civil to the absolute order of government, for such princes either
rule personally or through magistrates. In the latter case their
government is weaker and more insecure, because it rests entirely on
the goodwill of those citizens who are raised to the magistracy, and
who, especially in troubled times, can destroy the government with
great ease, either by intrigue or open defiance; and the prince has
not the chance amid tumults to exercise absolute authority, because
the citizens and subjects, accustomed to receive orders from
magistrates, are not of a mind to obey him amid these confusions,
and there will always be in doubtful times a scarcity of men whom he
can trust. For such a prince cannot rely upon what he observes in
quiet times, when citizens had need of the state, because then every
one agrees with him; they all promise, and when death is far distant
they all wish to die for him; but in troubled times, when the state
has need of its citizens, then he finds but few. And so much the
more is this experiment dangerous, inasmuch as it can only be tried
once. Therefore a wise prince ought to adopt such a course that his
citizens will always in every sort and kind of circumstance have
need of the state and of him, and then he will always find them
faithful.
                              CHAPTER X
               CONCERNING THE WAY IN WHICH THE STRENGTH
              OF ALL PRINCIPALITIES OUGHT TO BE MEASURED

  IT IS necessary to consider another point in examining the character
of these principalities: that is, whether a prince has such power
that, in case of need, he can support himself with his own
resources, or whether he has always need of the assistance of
others. And to make this quite clear I say that I consider those are
able to support themselves by their own resources who can, either by
abundance of men or money, raise a sufficient army to join battle
against any one who comes to attack them; and I consider those
always to have need of others who cannot show themselves against the
enemy in the field, but are forced to defend themselves by
sheltering behind walls. The first case has been discussed, but we
will speak of it again should it recur. In the second case one can say
nothing except to encourage such princes to provision and fortify
their towns, and not on any account to defend the country. And whoever
shall fortify his town well, and shall have managed the other concerns
of his subjects in the way stated above, and to be often repeated,
will never be attacked without great caution, for men are always
adverse to enterprises where difficulties can be seen, and it will
be seen not to be an easy thing to attack one who has his town well
fortified, and is not hated by his people.
  The cities of Germany are absolutely free, they own but little
country around them, and they yield obedience to the emperor when it
suits them, nor do they fear this or any other power they may have
near them, because they are fortified in such a way that every one
thinks the taking of them by assault would be tedious and difficult,
seeing they have proper ditches and walls, they have sufficient
artillery, and they always keep in public depots enough for one year's
eating, drinking, and firing. And beyond this, to keep the people
quiet and without loss to the state, they always have the means of
giving work to the community in those labours that are the life and
strength of the city, and on the pursuit of which the people are
supported; they also hold military exercises in repute, and moreover
have many ordinances to uphold them.
  Therefore, a prince who has a strong city, and had not made
himself odious, will not be attacked, or if any one should attack he
will only be driven off with disgrace; again, because that affairs
of this world are so changeable, it is almost impossible to keep an
army a whole year in the field without being interfered with. And
whoever should reply: If the people have property outside the city,
and see it burnt, they will not remain patient, and the long siege and
self-interest will make them forget their prince; to this I answer
that a powerful and courageous prince will overcome all such
difficulties by giving at one time hope to his subjects that the
evil will not be for long, at another time fear of the cruelty of
the enemy, then preserving himself adroitly from those subjects who
seem to him to be too bold.
  Further, the enemy would naturally on his arrival at once burn and
ruin the country at the time when the spirits of the people are
still hot and ready for the defence; and, therefore, so much the
less ought the prince to hesitate; because after a time, when
spirits have cooled, the damage is already done, the ills are
incurred, and there is no longer any remedy; and therefore they are so
much the more ready to unite with their prince, he appearing to be
under obligations to them now that their houses have been burnt and
their possessions ruined in his defence. For it is the nature of men
to be bound by the benefits they confer as much as by those they
receive. Therefore, if everything is well considered, it wilt not be
difficult for a wise prince to keep the minds of his citizens
steadfast from first to last, when he does not fail to support and
defend them.
                              CHAPTER XI
               CONCERNING ECCLESIASTICAL PRINCIPALITIES

  IT ONLY remains now to speak of ecclesiastical principalities,
touching which all difficulties are prior to getting possession,
because they are acquired either by capacity or good fortune, and they
can be held without either; for they are sustained by the ordinances
of religion, which are so all-powerful, and of such a character that
the principalities may be held no matter how their princes behave
and live. These princes alone have states and do not defend them, they
have subjects and do not rule them; and the states, although
unguarded, are not taken from them, and the subjects, although not
ruled, do not care, and they have neither the desire nor the ability
to alienate themselves. Such principalities only are secure and happy.
But being upheld by powers, to which the human mind cannot reach, I
shall speak no more of them, because, being exalted and maintained
by God, it would be the act of a presumptuous and rash man to
discuss them.
  Nevertheless, if any one should ask of me how comes it that the
Church has attained such greatness in temporal power, seeing that from
Alexander backwards the Italian potentates (not only those who have
been called potentates, but every baron and lord, though the smallest)
have valued the temporal power very slightly- yet now a king of France
trembles before it, and it has been able to drive him from Italy,
and to ruin the Venetians- although this may be very manifest, it does
not appear to me superfluous to recall it in some measure to memory.
  Before Charles, King of France, passed into Italy, this country
was under the dominion of the Pope, the Venetians, the King of Naples,
the Duke of Milan, and the Florentines. These potentates had two
principal anxieties: the one, that no foreigner should enter Italy
under arms; the other, that none of themselves should seize more
territory. Those about whom there was the most anxiety were the Pope
and the Venetians. To restrain the Venetians the union of all the
others was necessary, as it was for the defence of Ferrara; and to
keep down the Pope they made use of the barons of Rome, who, being
divided into two factions, Orsini and Colonna, had always a pretext
for disorder, and, standing with arms in their hands under the eyes of
the Pontiff, kept the pontificate weak and powerless. And although
there might arise sometimes a courageous pope, such as Sixtus [IV],
yet neither fortune nor wisdom could rid him of these annoyances.
And the short life of a pope is also a cause of weakness; for in the
ten years, which is the average life of a pope, he can with difficulty
lower one of the factions; and if, so to speak, one pope should almost
destroy the Colonna, another would arise hostile to the Orsini, who
would support their opponents, and yet would not have time to ruin the
Orsini. This was the reason why the temporal powers of the pope were
little esteemed in Italy.
  Alexander VI arose afterwards, who of all the pontiffs that have
ever been showed how a pope with both money and arms was able to
prevail; and through the instrumentality of the Duke Valentino, and by
reason of the entry of the French, he brought about all those things
which I have discussed above in the actions of the duke. And
although his intention was not to aggrandize the Church, but the duke,
nevertheless, what he did contributed to the greatness of the
Church, which, after his death and the ruin of the duke, became the
heir to all his labours.
  Pope Julius came afterwards and found the Church strong,
possessing all the Romagna, the barons of Rome reduced to impotence,
and, through the chastisements Alexander, the factions wiped out; he
also found the way open to accumulate money in a manner such as had
never been practised before Alexander's time. Such things Julius not
only followed, but improved upon, and he intended to gain Bologna,
to ruin the Venetians, and to drive the French out of Italy. All of
these enterprises prospered with him, and so much the more to his
credit, inasmuch as he did everything to strengthen the Church and not
any private person. He kept also the Orsini and Colonna factions
within the bounds in which he found them; and although there was among
them some mind to make disturbance, nevertheless he held two things
firm: the one, the greatness of the church, with which he terrified
them; and the other, not allowing them to have their own cardinals,
who caused the disorders among them. For whenever these factions
have their cardinals they do not remain quiet for long, because
cardinals foster the factions in Rome and out of it, and the barons
are compelled to support them, and thus from the ambitions of prelates
arise disorders and tumults among the barons. For these reasons his
Holiness Pope Leo found the pontificate most powerful, and it is to be
hoped that, if others made it great in arms, he will make it still
greater and more venerated by his goodness and infinite other virtues.
                             CHAPTER XII
                HOW MANY KINDS OF SOLDIERY THERE ARE,
                      AND CONCERNING MERCENARIES

  HAVING discoursed particularly on the characteristics of such
principalities as in the beginning I proposed to discuss, and having
considered in some degree the causes of their being good or bad, and
having shown the methods by which many have sought to acquire them and
to hold them, it now remains for me to discuss generally the means
of offence and defence which belong to each of them.
  We have seen above how necessary it is for a prince to have his
foundations well laid, otherwise it follows of necessity he will go to
ruin. The chief foundations of all states, new as well as old or
composite, are good laws and good arms; and as there cannot be good
laws where the state is not well armed, it follows that where they are
well armed they have good laws. I shall leave the laws out of the
discussion and shall speak of the arms.
  I say, therefore, that the arms with which a prince defends his
state are either his own, or they are mercenaries, auxiliaries, or
mixed. Mercenaries and auxiliaries are useless and dangerous; and if
one holds his state based on these arms, he will stand neither firm
nor safe; for they are disunited, ambitious and without discipline,
unfaithful, valiant before friends, cowardly before enemies; they have
neither the fear of God nor fidelity to men, and destruction is
deferred only so long as the attack is; for in peace one is robbed
by them, and in war by the enemy. The fact is, they have no other
attraction or reason for keeping the field than a trifle of stipend,
which is not sufficient to make them willing to die for you. They
are ready enough to be your soldiers whilst you do not make war, but
if war comes they take themselves off or run from the foe; which I
should have little trouble to prove, for the ruin of Italy has been
caused by nothing else than by resting all her hopes for many years on
mercenaries, and although they formerly made some display and appeared
valiant amongst themselves, yet when the foreigners came they showed
what they were. Thus it was that Charles, King of France, was
allowed to seize Italy with chalk in hand;* and he who told us that
our sins were the cause of it told the truth, but they were not the
sins he imagined, but those which I have related. And as they were the
sins of princes, it is the princes who have also suffered the penalty.

  * With which to chalk up the billets for his soldiers.

  I wish to demonstrate further the infelicity of these arms. The
mercenary captains are either capable men or they are not; if they
are, you cannot trust them, because they always aspire to their own
greatness, either by oppressing you, who are their master, or others
contrary to your intentions; but if the captain is not skilful, you
are ruined in the usual way.
  And if it be urged that whoever is armed will act in the same way,
whether mercenary or not, I reply that when arms have to be resorted
to, either by a prince or a republic, then the prince ought to go in
person and perform the duty of captain; the republic has to send its
citizens, and when one is sent who does not turn out satisfactorily,
it ought to recall him, and when one is worthy, to hold him by the
laws so that he does not leave the command. And experience has shown
princes and republics, single-handed, making the greatest progress,
and mercenaries doing nothing except damage; and it is more
difficult to bring a republic, armed with its own arms, under the sway
of one of its citizens than it is to bring one armed with foreign
arms. Rome and Sparta stood for many ages armed and free. The Switzers
are completely armed and quite free.
  Of ancient mercenaries, for example, there are the Carthaginians,
who were oppressed by their mercenary soldiers after the first war
with the Romans, although the Carthaginians had their own citizens for
captains. After the death of Epaminondas, Philip of Macedon was made
captain of their soldiers by the Thebans, and after victory he took
away their liberty.
  Duke Filippo being dead, the Milanese enlisted Francesco Sforza
against the Venetians, and he, having overcome the enemy at
Caravaggio, allied himself with them to crush the Milanese, his
masters. His father, Sforza, having been engaged by Queen Johanna of
Naples, left her unprotected, so that she was forced to throw
herself into the arms of the King of Aragon, in order to save her
kingdom. And if the Venetians and Florentines formerly extended
their dominions by these arms, and yet their captains did not make
themselves princes, but have defended them, I reply that the
Florentines in this case have been favoured by chance, for of the able
captains, of whom they might have stood in fear, some have not
conquered, some have been opposed, and others have turned their
ambitions elsewhere. One who did not conquer was Giovanni Acuto,*
and since he did not conquer his fidelity cannot be proved; but
every one will acknowledge that, had he conquered, the Florentines
would have stood at his discretion. Sforza had the Bracceschi always
against him, so they watched each other. Francesco turned his ambition
to Lombardy; Braccio against the Church and the kingdom of Naples. But
let us come to that which happened a short while ago. The
Florentines appointed as their captain Paolo Vitelli, a most prudent
man, who from a private position had risen to the greatest renown.
If this man had taken Pisa, nobody can deny that it would have been
proper for the Florentines to keep in with him, for if he became the
soldier of their enemies they had no means of resisting, and if they
held to him they must obey him. The Venetians, if their achievements
are considered, will be seen to have acted safely and gloriously so
long as they sent to war their own men, when with armed gentlemen
and plebeians they did valiantly. This was before they turned to
enterprises on land, but when they began to fight on land they forsook
this virtue and followed the custom of Italy. And in the beginning
of their expansion on land, through not having much territory, and
because of their great reputation, they had not much to fear from
their captains; but when they expanded, as under Carmignola, they
had a taste of this mistake; for, having found him a most valiant
man (they beat the Duke of Milan under his leadership), and, on the
other hand, knowing how lukewarm he was in the war, they feared they
would no longer conquer under him, and for this reason they were not
willing, nor were they able, to let him go; and so, not to lose
again that which they had acquired, they were compelled, in order to
secure themselves, to murder him. They had afterwards for their
captains Bartolomeo da Bergamo, Roberto da San Severino, the Count
of Pitigliano, and the like, under whom they had to dread loss and not
gain, as happened afterwards at Vaila, where in one battle they lost
that which in eight hundred years they had acquired with so much
trouble. Because from such arms conquests come but slowly, long
delayed and inconsiderable, but the losses sudden and portentous.

  * As Sir John Hawkwood, the English leader of mercenaries, was
called by the Italians.

  And as with these examples I have reached Italy, which has been
ruled for many years by mercenaries, I wish to discuss them more
seriously, in order that, having seen their rise and progress, one may
be better prepared to counteract them. You must understand that the
empire has recently come to be repudiated in Italy, that the Pope
has acquired more temporal power, and that Italy has been divided up
into more states, for the reason that many of the great cities took up
arms against their nobles, who, formerly favoured by the emperor, were
oppressing them, whilst the Church was favouring them so as to gain
authority in temporal power: in many others their citizens became
princes. From this it came to pass that Italy fell partly into the
hands of the Church and of republics, and, the Church consisting of
priests and the republic of citizens unaccustomed to arms, both
commenced to enlist foreigners.
  The first who gave renown to this soldiery was Alberigo da Conio,
a native of the Romagna. From the school of this man sprang, among
others, Braccio and Sforza, who in their time were the arbiters of
Italy. After these came all the other captains who till now have
directed the arms of Italy; and the end of all their valour has
been, that she has been overrun by Charles, robbed by Louis, ravaged
by Ferdinand, and insulted by the Switzers. The principle that has
guided them has been, first, to lower the credit of infantry so that
they might increase their own. They did this because, subsisting on
their pay and without territory, they were unable to support many
soldiers, and a few infantry did not give them any authority; so
they were led to employ cavalry, with a moderate force of which they
were maintained and honoured; and affairs were brought to such a
pass that, in an army of twenty thousand soldiers, there were not to
be found two thousand foot soldiers. They had, besides this, used
every art to lessen fatigue and danger to themselves and their
soldiers, not killing in the fray, but taking prisoners and liberating
without ransom. They did not attack towns at night, nor did the
garrisons of the towns attack encampments at night; they did not
surround the camp either with stockade or ditch, nor did they campaign
in the winter. All these things were permitted by their military
rules, and devised by them to avoid, as I have said, both fatigue
and dangers; thus they have brought Italy to slavery and contempt.
                             CHAPTER XIII
        CONCERNING AUXILIARIES, MIXED SOLDIERY, AND ONE'S OWN

  AUXILIARIES, which are the other useless arm, are employed when a
prince is called in with his forces to aid and defend, as was done
by Pope Julius in the most recent times; for he, having, in the
enterprise against Ferrara, had poor proof of his mercenaries,
turned to auxiliaries, and stipulated with Ferdinand, King of Spain,
for his assistance with men and arms. These arms may be useful and
good in themselves, but for him who calls them in they are always
disadvantageous; for losing, one is undone, and winning, one is
their captive.
  And although ancient histories may be full of examples, I do not
wish to leave this recent one of Pope Julius II, the peril of which
cannot fall to be perceived; for he, wishing to get Ferrara, threw
himself entirely into the hands of the foreigner. But his good fortune
brought about a third event, so that he did not reap the fruit of
his rash choice; because, having auxiliaries routed at Ravenna, and
the Switzers having risen and driven out the conquerors (against all
expectation, both his and others), it so came to pass that he did
not become prisoner to his enemies, they having fled, nor to his
auxiliaries, he having conquered by other arms than theirs.
  The Florentines, being entirely without arms, sent ten thousand
Frenchmen to take Pisa, whereby they ran more danger than at any other
time of their troubles.
  The Emperor of Constantinople, to oppose his neighbours, sent ten
thousand Turks into Greece, who, on the war being finished, were not
willing to quit; this was the beginning of the servitude of Greece
to the infidels.
  Therefore, let him who has no desire to conquer make use of these
arms, for they are much more hazardous than mercenaries, because
with them the ruin is ready made; they are all united, all yield
obedience to others; but with mercenaries, when they have conquered,
more time and better opportunities are needed to injure you; they
are not all of one community, they are found and paid by you, and a
third party, which you have made their head, is not able all at once
to assume enough authority to injure you. In conclusion, in
mercenaries dastardy is most dangerous; in auxiliaries, valour. The
wise prince, therefore, has always avoided these arms and turned to
his own; and has been willing rather to lose with them than to conquer
with others, not deeming that a real victory which is gained with
the arms of others.
  I shall never hesitate to cite Cesare Borgia and his actions. This
duke entered the Romagna with auxiliaries, taking there only French
soldiers, and with them he captured Imola and Forli; but afterwards,
such forces not appearing to him reliable, he turned to mercenaries,
discerning less danger in them, and enlisted the Orsini and Vitelli;
whom presently, on handling and finding them doubtful, unfaithful, and
dangerous, he destroyed and turned to his own men. And the
difference between one and the other of these forces can easily be
seen when one considers the difference there was in the reputation
of the duke, when he had the French, when he had the Orsini and
Vitelli, and when he relied on his own soldiers, on whose fidelity
he could always count and found it ever increasing; he was never
esteemed more highly than when every one saw that he was complete
master of his own forces.
  I was not intending to go beyond Italian and recent examples, but
I am unwilling to leave out Hiero, the Syracusan, he being one of
those I have named above. This man, as I have said, made head of the
army by the Syracusans, soon found out that a mercenary soldiery,
constituted like our Italian condottieri, was of no use; and it
appearing to him that he could neither keep them nor let them go, he
had them all cut to pieces, and afterwards made war with his own
forces and not with aliens.
  I wish also to recall to memory an instance from the Old Testament
applicable to this subject. David offered himself to Saul to fight
with Goliath, the Philistine champion, and, to give him courage,
Saul armed him with his own weapons; which David rejected as soon as
he had them on his back, saying he could make no use of them, and that
he wished to meet the enemy with his sling and his knife. In
conclusion, the arms of others either fall from your back, or they
weigh you down, or they bind you fast.
  Charles VII, the father of King Louis XI, having by good fortune and
valour liberated France from the English, recognized the necessity
of being armed with forces of his own, and he established in his
kingdom ordinances concerning men-at-arms and infantry. Afterwards his
son, King Louis, abolished the infantry and began to enlist the
Switzers, which mistake, followed by others, is, as is now seen, a
source of peril to that kingdom; because, having raised the reputation
of the Switzers, he has entirely diminished the value of his own arms,
for he has destroyed the infantry altogether; and his men-at-arms he
has subordinated to others, for, being as they are so accustomed to
fight along with Switzers, it does not appear that they can now
conquer without them. Hence it arises that the French cannot stand
against the Switzers, and without the Switzers they do not come off
well against others. The armies of the French have thus become
mixed, partly mercenary and partly national, both of which arms
together are much better than mercenaries alone or auxiliaries
alone, yet much inferior to one's own forces. And this example
proves it, the kingdom of France would be unconquerable if the
ordinance of Charles had been enlarged or maintained.
  But the scanty wisdom of man, on entering into an affair which looks
well at first, cannot discern the poison that is hidden in it, as I
have said above of hectic fevers. Therefore, if he who rules a
principality cannot recognize evils until they are upon him, he is not
truly wise; and this insight is given to few. And if the first
disaster to the Roman Empire should be examined, it will be found to
have commenced only with the enlisting of the Goths; because from that
time the vigour of the Roman Empire began to decline, and all that
valour which had raised it passed away to others.
  I conclude, therefore, that no principality is secure without having
its own forces; on the contrary, it is entirely dependent on good
fortune, not having the valour which in adversity would defend it. And
it has always been the opinion and judgment of wise men that nothing
can be so uncertain or unstable as fame or power not founded on its
own strength. And one's own forces  are those which are composed
either of subjects, citizens, or dependants; all others are
mercenaries or auxiliaries. And the way to take ready one's own forces
will be easily found if the rules suggested by me shall be reflected
upon, and if one will consider how Philip, the father of Alexander the
Great, and many republics and princes have armed and organized
themselves, to which rules I entirely commit myself.
                             CHAPTER XIV
                     THAT WHICH CONCERNS A PRINCE
                   ON THE SUBJECT OF THE ART OF WAR

  A PRINCE ought to have no other aim or thought, nor select
anything else for his study, than war and its rules and discipline;
for this is the sole art that belongs to him who rules, and it is of
such force that it not only upholds those who are born princes, but it
often enables men to rise from a private station to that rank. And, on
the contrary, it is seen that when princes have thought more of ease
than of arms they have lost their states. And the first cause of
your losing it is to neglect this art; and what enables you to acquire
a state is to be master of the art. Francesco Sforza, through being
martial, from a private person became Duke of Milan; and the sons,
through avoiding the hardships and troubles of arms, from dukes became
private persons. For among other evils which being unarmed brings you,
it causes you to be despised, and this is one of those ignominies
against which a prince ought to guard himself, as is shown later on.
Because there is nothing proportionate between the armed and the
unarmed; and it is not reasonable that he who is armed should yield
obedience willingly to him who is unarmed, or that the unarmed man
should be secure among armed servants. Because, there being in the one
disdain and in the other suspicion, it is not possible for them to
work well together. And therefore a prince who does not understand the
art of war, over and above the other misfortunes already mentioned,
cannot be respected by his soldiers, nor can he rely on them. He ought
never, therefore, to have out of his thoughts this subject of war, and
in peace he should addict himself more to its exercise than in war;
this he can do in two ways, the one by action, the other by study.
  As regards action, he ought above all things to keep his men well
organized and drilled, to follow incessantly the chase, by which he
accustoms his body to hardships, and learns something of the nature of
localities, and gets to find out how the mountains rise, how the
valleys open out, how the plains lie, and to understand the nature
of rivers and marshes, and in all this to take the greatest care.
Which knowledge is useful in two ways. Firstly, he learns to know
his country, and is better able to undertake its defence;
afterwards, by means of the knowledge and observation of that
locality, he understands with ease any other which it may be necessary
for him to study hereafter; because the hills, valleys, and plains,
and rivers and marshes that are, for instance, in Tuscany, have a
certain resemblance to those of other countries, so that with a
knowledge of the aspect of one country one can easily arrive at a
knowledge of others. And the prince that lacks this skill lacks the
essential which it is desirable that a captain should possess, for
it teaches him to surprise his enemy, to select quarters, to lead
armies, to array the battle, to besiege towns to advantage.
  Philopoemen, Prince of the Achaeans, among other praises which
writers have bestowed on him, is commended because in time of peace he
never had anything in his mind but the rules of war; and when he was
in the country with friends, he often stopped and reasoned with
them: "If the enemy should be upon that hill, and we should find
ourselves here with our army, with whom would be the advantage? How
should one best advance to meet him, keeping the ranks? If we should
wish to retreat, how ought we to set about it? If they should retreat,
how ought we to pursue?" And he would set forth to them, as he went,
all the chances that could befall an army; he would listen to their
opinion and state his, confirming it with reasons, so that by these
continual discussions there could never arise, in time of war, any
unexpected circumstances that he could deal with.
  But to exercise the intellect the prince should read histories,
and study there the actions of illustrious men, to see how they have
borne themselves in war, to examine the causes of their victories
and defeat, so as to avoid the latter and imitate the former; and
above all do as an illustrious man did, who took as an exemplar one
who had been praised and famous before him, and whose achievements and
deeds he always kept in his mind, as it is said Alexander the Great
imitated Achilles, Caesar Alexander, Scipio Cyrus. And whoever reads
the life of Cyrus, written by Xenophon, will recognize afterwards in
the life of Scipio how that imitation was his glory, and how in
chastity, affability, humanity, and liberality Scipio conformed to
those things which have been written of Cyrus by Xenophon. A wise
prince ought to observe some such rules, and never in peaceful times
stand idle, but increase his resources with industry in such a way
that they may be available to him in adversity, so that if fortune
changes it may find him prepared to resist her blows.
                              CHAPTER XV
       CONCERNING THINGS FOR WHICH MEN, AND ESPECIALLY PRINCES,
                        ARE PRAISED OR BLAMED

  IT REMAINS now to see what ought to be the rules of conduct for a
prince towards subject and friends. And as I know that many have
written on this point, I expect I shall be considered presumptuous
in mentioning it again, especially as in discussing it I shall
depart from the methods of other people. But, it being my intention to
write a thing which shall be useful to him who apprehends it, it
appears to me more appropriate to follow up the real truth of a matter
than the imagination of it; for many have pictured republics and
principalities which in fact have never been known or seen, because
how one lives is so far distant from how one ought to live, that he
who neglects what is done for what ought to be done, sooner effects
his ruin than his preservation; for a man who wishes to act entirely
up to his professions of virtue soon meets with what destroys him
among so much that is evil.
  Hence it is necessary for a prince wishing to hold his own to know
how to do wrong, and to make use of it or not according to
necessity. Therefore, putting on one side imaginary things
concerning a prince, and discussing those which are real, I say that
all men when they are spoken of, and chiefly princes for being more
highly placed, are remarkable for some of those qualities which
bring them either blame or praise; and thus it is that one is
reputed liberal, another miserly, using a Tuscan term (because an
avaricious person in our language is still he who desires to possess
by robbery, whilst we call one miserly who deprives himself too much
of the use of his own); one is reputed generous, one rapacious; one
cruel, one compassionate; one faithless, another faithful; one
effeminate and cowardly, another bold and brave; one affable,
another haughty; one lascivious, another chaste; one sincere,
another cunning; one hard, another easy; one grave, another frivolous;
one religious, another unbelieving, and the like. And I know that
every one will confess that it would be most praiseworthy in a
prince to exhibit all the above qualities that are considered good;
but because they can neither be entirely possessed nor observed, for
human conditions do not permit it, it is necessary for him to be
sufficiently prudent that he may know how to avoid the reproach of
those vices which would lose him his state; and also to keep
himself, if it be possible, from those which would not lose him it;
but this not being possible, he may with less hesitation abandon
himself to them. And again, he need not make himself uneasy at
incurring a reproach for those vices without which the state can
only be saved with difficulty, for if everything is considered
carefully, it will be found that something which looks like virtue, if
followed, would be his ruin; whilst something else, which looks like
vice, yet followed brings him security and prosperity.
                             CHAPTER XVI
                  CONCERNING LIBERALITY AND MEANNESS

  COMMENCING then with the first of the above-named characteristics, I
say that it would be well to be reputed liberal. Nevertheless,
liberality exercised in a way that does not bring you the reputation
for it, injures you; for if one exercises it honestly and as it should
be exercised, it may not become known, and you will not avoid the
reproach of its opposite. Therefore, any one wishing to maintain among
men the name of liberal is obliged to avoid no attribute of
magnificence; so that a prince thus inclined will consume in such acts
all his property, and will be compelled in the end, if he wish to
maintain the name of liberal, to unduly weigh down his people, and tax
them, and do everything he can to get money. This will soon make him
odious to his subjects, and becoming poor he will be little valued
by any one; thus, with his liberality, having offended many and
rewarded few, he is affected by the very first trouble and
imperilled by whatever may be the first danger; recognizing this
himself, and wishing to draw back from it, he runs at once into the
reproach of being miserly.
  Therefore, a prince, not being able to exercise this virtue of
liberality in such a way that it is recognized, except to his cost, if
he is wise he ought not to fear the reputation of being mean, for in
time he will come to be more considered than if liberal, seeing that
with his economy his revenues are enough, that he can defend himself
against all attacks, and is able to engage in enterprises without
burdening his people; thus it comes to pass that he exercises
liberality towards all from whom he does not take, who are numberless,
and meanness towards those to whom he does not give, who are few.
  We have not seen great things done in our time except by those who
have been considered mean; the rest have failed. Pope Julius the
Second was assisted in reaching the papacy by a reputation for
liberality, yet he did not strive afterwards to keep it up, when he
made war on the King of France; and he made many wars without imposing
any extraordinary tax on his subjects, for he supplied his
additional expenses out of his long thriftiness. The present King of
Spain would not have undertaken or conquered in so many enterprises if
he had been reputed liberal. A prince, therefore, provided that he has
not to rob his subjects, that he can defend himself, that he does
not become poor and abject, that he is not forced to become rapacious,
ought to hold of little account a reputation for being mean, for it is
one of those vices which will enable him to govern.
  And if any one should say: Caesar obtained empire by liberality, and
many others have reached the highest positions by having been liberal,
and by being considered so, I answer: Either you are a prince in fact,
or in a way to become one. In the first case this liberality is
dangerous, in the second it is very necessary to be considered
liberal; and Caesar was one of those who wished to become
pre-eminent in Rome; but if he had survived after becoming so, and had
not moderated his expenses, he would have destroyed his government.
And if any one should reply: Many have been princes, and have done
great things with armies, who have been considered very liberal, I
reply: Either a prince spends that which is his own or his subjects'
or else that of others. In the first case he ought to be sparing, in
the second he ought not to neglect any opportunity for liberality. And
to the price who goes forth with his army, supporting it by pillage,
sack, and extortion, handling that which belongs to others, this
liberality is necessary, otherwise he would not be followed by
soldiers. And of that which is neither yours nor your subjects' you
can be a ready giver, as were Cyrus, Caesar, and Alexander; because it
does not take away your reputation if you squander that of others, but
adds to it; it is only squandering your own that injures you.
  And there is nothing wastes so rapidly as liberality, for even
whilst you exercise it you lose the power to do so, and so become
either poor or despised, or else, in avoiding poverty, rapacious and
hated. And a prince should guard himself, above all things, against
being despised and hated; and liberality leads you to both.
Therefore it is wiser to have a reputation for meanness which brings
reproach without hatred, than to be compelled through seeking a
reputation for liberality to incur a name for rapacity which begets
reproach with hatred.
                             CHAPTER XVII
                 CONCERNING CRUELTY AND CLEMENCY, AND
             WHETHER IT IS BETTER TO BE LOVED THAN FEARED

  COMING now to the other qualities mentioned above, I say that
every prince ought to desire to be considered clement and not cruel.
Nevertheless he ought to take care not to misuse this clemency. Cesare
Borgia was considered cruel; notwithstanding, his cruelty reconciled
the Romagna, unified it, and restored it to peace and loyalty. And
if this be rightly considered, he will be seen to have been much
more merciful than the Florentine people, who, to avoid a reputation
for cruelty, permitted Pistoia to be destroyed. Therefore a prince, so
long as he keeps his subjects united and loyal, ought not to mind
the reproach of cruelty; because with a few examples he will be more
merciful than those who, through too much mercy, allow disorders to
arise, from which follow murders or robberies; for these are wont to
injure the whole people, whilst those executions which originate
with a prince offend the individual only.
  And of all princes, it is impossible for the new prince to avoid the
imputation of cruelty, owing to new states being full of dangers.
Hence Virgil, through the mouth of Dido, excuses the inhumanity of her
reign owing to its being new, saying:

              Res dura, et regni novitas me talia cogunt
              Moliri, et late fines custode tueri.*

  * ...against my will, my fate,
    A throne unsettled, and an infant state,
    Bid me defend my realms with all my pow'rs,
    And guard with these severities my shores.

  Nevertheless he ought to be slow to believe and to act, nor should
he himself show fear, but proceed in a temperate manner with
prudence and humanity, so that too much confidence may not make him
incautious and too much distrust render him intolerable.
  Upon this a question arises: whether it be better to be loved than
feared or feared than loved? It may be answered that one should wish
to be both, but, because it is difficult to unite them in one
person, is much safer to be feared than loved, when, of the two,
either must be dispensed with. Because this is to be asserted in
general of men, that they are ungrateful, fickle, false, cowardly,
covetous, and as long as you succeed they are yours entirely; they
will offer you their blood, property, life and children, as is said
above, when the need is far distant; but when it approaches they
turn against you. And that prince who, relying entirely on their
promises, has neglected other precautions, is ruined; because
friendships that are obtained by payments, and not by greatness or
nobility of mind, may indeed be earned, but they are not secured,
and in time of need cannot be relied upon; and men have less scruple
in offending one who is beloved than one who is feared, for love is
preserved by the link of obligation which, owing to the baseness of
men, is broken at every opportunity for their advantage; but fear
preserves you by a dread of punishment which never fails.
  Nevertheless a prince ought to inspire fear in such a way that, if
he does not win love, he avoids hatred; because he can endure very
well being feared whilst he is not hated, which will always be as long
as he abstains from the property of his citizens and subjects and from
their women. But when it is necessary for him to proceed against the
life of someone, he must do it on proper justification and for
manifest cause, but above all things he must keep his hands off the
property of others, because men more quickly forget the death of their
father than the loss of their patrimony. Besides, pretexts for
taking away the property are never wanting; for he who has once
begun to live by robbery will always find pretexts for seizing what
belongs to others; but reasons for taking life, on the contrary, are
more difficult to find and sooner lapse. But when a prince is with his
army, and has under control a multitude of soldiers, then it is
quite necessary for him to disregard the reputation of cruelty, for
without it he would never hold his army united or disposed to its
duties.
  Among the wonderful deeds of Hannibal this one is enumerated: that
having led an enormous army, composed of many various races of men, to
fight in foreign lands, no dissensions arose either among them or
against the prince, whether in his bad or in his good fortune. This
arose from nothing else than his inhuman cruelty, which, with his
boundless valour, made him revered and terrible in the sight of his
soldiers, but without that cruelty, his other virtues were not
sufficient to produce this effect. And shortsighted writers admire his
deeds from one point of view and from another condemn the principal
cause of them. That it is true his other virtues would not have been
sufficient for him may be proved by the case of Scipio, that most
excellent man, not of his own times but within the memory of man,
against whom, nevertheless, his army rebelled in Spain; this arose
from nothing but his too great forbearance, which gave his soldiers
more licence than is consistent with military discipline. For this
he was upbraided in the Senate by Fabius Maximus, and called the
corrupter of the Roman soldiery. The Locrians were laid waste by a
legate of Scipio, yet they were not avenged by him, nor was the
insolence of the legate punished, owing entirely to his easy nature.
Insomuch that someone in the Senate, wishing to excuse him, said there
were many men who knew much better how not to err than to correct
the errors of others. This disposition, if he had been continued in
the command, would have destroyed in time the fame and glory of
Scipio; but, he being under the control of the Senate, this
injurious characteristic not only concealed itself, but contributed to
his glory.
  Returning to the question of being feared or loved, I come to the
conclusion that, men loving according to their own will and fearing
according to that of the prince, a wise prince should establish
himself on that which is in his own control and not in that of others;
he must endeavour only to avoid hatred, as is noted.
                            CHAPTER XVIII
        CONCERNING THE WAY IN WHICH PRINCES SHOULD KEEP FAITH

  EVERY one admits how praiseworthy it is in a prince to keep faith,
and to live with integrity and not with craft. Nevertheless our
experience has been that those princes who have done great things have
held good faith of little account, and have known how to circumvent
the intellect of men by craft, and in the end have overcome those
who have relied on their word. You must know there are two ways of
contesting, the one by the law, the other by force; the first method
is proper to men, the second to beasts; but because the first is
frequently not sufficient, it is necessary to have recourse to the
second. Therefore it is necessary for a prince to understand how to
avail himself of the beast and the man. This has been figuratively
taught to princes by ancient writers, who describe how Achilles and
many other princes of old were given to the Centaur Chiron to nurse,
who brought them up in his discipline; which means solely that, as
they had for a teacher one who was half beast and half man, so it is
necessary for a prince to know how to make use of both natures, and
that one without the other is not durable. A prince, therefore,
being compelled knowingly to adopt the beast, ought to choose the
fox and the lion; because the lion cannot defend himself against
snares and the fox cannot defend himself against wolves. Therefore, it
is necessary to be a fox to discover the snares and a lion to
terrify the wolves. Those who rely simply on the lion do not
understand what they are about. Therefore a wise lord cannot, nor
ought he to, keep faith when such observance may be turned against
him, and when the reasons that caused him to pledge it exist no
longer. If men were entirely good this precept would not hold, but
because they are bad, and will not keep faith with you, you too are
not bound to observe it with them. Nor will there ever be wanting to a
prince legitimate reasons to excuse this nonobservance. Of this
endless modern examples could be given, showing how many treaties
and engagements have been made void and of no effect through the
faithlessness of princes; and he who has known best how to employ
the fox has succeeded best.
  But it is necessary to know well how to disguise this
characteristic, and to be a great pretender and dissembler; and men
are so simple, and so subject to present necessities, that he who
seeks to deceive will always find someone who will allow himself to be
deceived. One recent example I cannot pass over in silence.
Alexander VI did nothing else but deceive men, nor ever thought of
doing otherwise, and he always found victims; for there never was a
man who had greater power in asserting, or who with greater oaths
would affirm a thing, yet would observe it less; nevertheless his
deceits always succeeded according to his wishes, because he well
understood this side of mankind.
  Therefore it is unnecessary for a prince to have all the good
qualities I have enumerated, but it is very necessary to appear to
have them. And I shall dare to say this also, that to have them and
always to observe them is injurious, and that to appear to have them
is useful; to appear merciful, faithful, humane, religious, upright,
and to be so, but with a mind so framed that should you require not to
be so, you may be able and know how to change to the opposite.
  And you have to understand this, that a prince, especially a new
one, cannot observe all those things for which men are esteemed, being
often forced, in order to maintain the state, to act contrary to
faith, friendship, humanity, and religion. Therefore it is necessary
for him to have a mind ready to turn itself accordingly as the winds
and variations of fortune force it, yet, as I have said above, not
to diverge from the good if he can avoid doing so, but, if
compelled, then to know how to set about it.
  For this reason a prince ought to take care that he never lets
anything slip from his lips that is not replete with the above-named
five qualities, that he may appear to him who sees and hears him
altogether merciful, faithful, humane, upright, and religious. There
is nothing more necessary to appear to have than this last quality,
inasmuch as men judge generally more by the eye than by the hand,
because it belongs to everybody to see you, to few to come in touch
with you. Every one sees what you appear to be, few really know what
you are, and those few dare not oppose themselves to the opinion of
the many, who have the majesty of the state to defend them; and in the
actions of all men, and especially of princes, which it is not prudent
to challenge, one judges by the result.
  For that reason, let a prince have the credit of conquering and
holding his state, the means will always be considered honest, and
he will be praised by everybody because the vulgar are always taken by
what a thing seems to be and by what comes of it; and in the world
there are only the vulgar, for the few find a place there only when
the many have no ground to rest on.
  One prince* of the present time, whom it is not well to name,
never preaches anything else but peace and good faith, and to both
he is most hostile, and either, if he had kept it, would have deprived
him of reputation and kingdom many a time.

  * Maximilian I, Holy Roman Emperor.
                             CHAPTER XIX
            THAT ONE SHOULD AVOID BEING DESPISED AND HATED

  Now, concerning the characteristics of which mention is made
above, I have spoken of the more important ones, the others I wish
to discuss briefly under this generality, that the prince must
consider, as has been in part said before, how to avoid those things
which will make him hated or contemptible; and as often as he shall
have succeeded he will have fulfilled his part, and he need not fear
any danger in other reproaches.
  It makes him hated above all things, as I have said, to be
rapacious, and to be a violator of the property and women of his
subjects, from both of which he must abstain. And when neither their
property nor honour is touched, the majority of men live content,
and he has only to contend with the ambition of a few, whom he can
curb with ease in many ways.
  It makes him contemptible to be considered fickle, frivolous,
effeminate, mean-spirited, irresolute, from all of which a prince
should guard himself as from a rock; and he should endeavour to show
in his actions greatness, courage, gravity, and fortitude; and in
his private dealings with his subjects let him show that his judgments
are irrevocable, and maintain himself in such reputation that no one
can hope either to deceive him or to get round him.
  That prince is highly esteemed who conveys this impression of
himself, and he who is highly esteemed is not easily conspired
against; for, provided it is well known that he is an excellent man
and revered by his people, he can only be attacked with difficulty.
For this reason a prince ought to have two fears, one from within,
on account of his subjects, the other from without, on account of
external powers. From the latter he is defended by being well armed
and having good allies, and if he is well armed he will have good
friends, and affairs will always remain quiet within when they are
quiet without, unless they should have been already disturbed by
conspiracy; and even should affairs outside be disturbed, if he has
carried out his preparations and has lived as I have said, as long
as he does not despair, he will resist every attack, as I said Nabis
the Spartan did.
  But concerning his subjects, when affairs outside are disturbed he
has only to fear that they will conspire secretly, from which a prince
can easily secure himself by avoiding being hated and despised, and by
keeping the people satisfied with him, which it is most necessary
for him to accomplish, as I said above at length. And one of the
most efficacious remedies that a prince can have against
conspiracies is not to be hated and despised by the people, for he who
conspires against a prince always expects to please them by his
removal; but when the conspirator can only look forward to offending
them, he will not have the courage to take such a course, for the
difficulties that confront a conspirator are infinite. And as
experience shows, many have been the conspiracies, but few have been
successful; because he who conspires cannot act alone, nor can he take
a companion except from those whom he believes to be malcontents,
and as soon as you have opened your mind to a malcontent you have
given him the material with which to content himself, for by
denouncing you he can look for every advantage; so that, seeing the
gain from this course to be assured, and seeing the other to be
doubtful and full of dangers, he must be a very rare friend, or a
thoroughly obstinate enemy of the prince, to keep faith with you.
  And, to reduce the matter into a small compass, I say that, on the
side of the conspirator, there is nothing but fear, jealousy, prospect
of punishment to terrify him; but on the side of the prince there is
the majesty of the principality, the laws, the protection of friends
and the state to defend him; so that, adding to all these things the
popular goodwill, it is impossible that any one should be so rash as
to conspire. For whereas in general the conspirator has to fear before
the execution of his plot, in this case he has also to fear the sequel
to the crime; because on account of it he has the people for an enemy,
and thus cannot hope for any escape.
  Endless examples could be given on this subject, but I will be
content with one, brought to pass within the memory of our fathers.
Messer Annibale Bentivoglio, who was prince in Bologna (grandfather of
the present Annibale), having been murdered by the Canneschi, who
had conspired against him, not one of his family survived but Messer
Giovanni, who was in childhood: immediately after his assassination
the people rose and murdered all the Canneschi. This sprung from the
popular goodwill which the house of Bentivoglio enjoyed in those
days in Bologna; which was so great that, although none remained there
after the death of Annibale who were able to rule the state, the
Bolognese, having information that there was one of the Bentivoglio
family in Florence, who up to that time had been considered the son of
a blacksmith, sent to Florence for him and gave him the government
of their city, and it was ruled by him until Messer Giovanni came in
due course to the government.
  For this reason I consider that a prince ought to reckon
conspiracies of little account when his people hold him in esteem; but
when it is hostile to him, and bears hatred towards him, he ought to
fear everything and everybody. And well-ordered states and wise
princes have taken every care not to drive the nobles to
desperation, and to keep the people satisfied and contented, for
this is one of the most important objects a prince can have.
  Among the best ordered and governed kingdoms of our times is France,
and in it are found many good institutions on which depend the liberty
and security of the king; of these the first is the parliament and its
authority, because he who founded the kingdom, knowing the ambition of
the nobility and their boldness, considered that a bit in their mouths
would be necessary to hold them in; and, on the other side, knowing
the hatred of the people, founded in fear, against the nobles, he
wished to protect them, yet he was not anxious for this to be the
particular care of the king; therefore, to take away the reproach
which he would be liable to from the nobles for favouring the
people, and from the people for favouring the nobles, he set up an
arbiter, who should be one who could beat down the great and favour
the lesser without reproach to the king. Neither could you have a
better or a more prudent arrangement, or a greater source of
security to the king and kingdom. From this one can draw another
important conclusion, that princes ought to leave affairs of
reproach to the management of others, and keep those of grace in their
own hands. And further, I consider that a prince ought to cherish
the nobles, but not so as to make himself hated by the people.
  It may appear, perhaps, to some who have examined the lives and
deaths of the Roman emperors that many of them would be an example
contrary to my opinion, seeing that some of them lived nobly and
showed great qualities of soul, nevertheless they have lost their
empire or have been killed by subjects who have conspired against
them. Wishing, therefore, to answer these objections, I will recall
the characters of some of the emperors, and will show that the
causes of their ruin were not different to those alleged by me; at the
same time I will only submit for consideration those things that are
noteworthy to him who studies the affairs of those times.
  It seems to me sufficient to take all those emperors who succeeded
to the empire from Marcus the philosopher down to Maximinus; they were
Marcus and his son Commodus, Pertinax, Julian, Severus and his son
Antoninus Caracalla, Macrinus, Heliogabalus, Alexander, and Maximinus.
  There is first to note that, whereas in other principalities the
ambition of the nobles and the insolence of the people only have to be
contended with, the Roman emperors had a third difficulty in having to
put up with the cruelty and avarice of their soldiers, a matter so
beset with difficulties that it was the ruin of many; for it was a
hard thing to give satisfaction both to soldiers and people; because
the people loved peace, and for this reason they loved the
unaspiring prince, whilst the soldiers loved the warlike prince who
was bold, cruel, and rapacious, which qualities they were quite
willing he should exercise upon the people, so that they could get
double pay and give vent to their greed and cruelty. Hence it arose
that those emperors were always overthrown who, either by birth or
training, had no great authority, and most of them, especially those
who came new to the principality, recognizing the difficulty of
these two opposing humours, were inclined to give satisfaction to
the soldiers, caring little about injuring the people. Which course
was necessary, because, as princes cannot help being hated by someone,
they ought, in the first place, to avoid being hated by every one, and
when they cannot compass this, they ought to endeavour with the utmost
diligence to avoid the hatred of the most powerful. Therefore, those
emperors who through inexperience had need of special favour adhered
more readily to the soldiers than to the people; a course which turned
out advantageous to them or not, accordingly as the prince knew how to
maintain authority over them.
  From these causes it arose that Marcus, [Aurelius], Pertinax, and
Alexander, being all men of modest life, lovers of justice, enemies to
cruelty, humane, and benignant, came to a sad end except Marcus; he
alone lived and died honoured, because he had succeeded to the
throne by hereditary title, and owed nothing either to the soldiers or
the people; and afterwards, being possessed of many virtues which made
him respected, he always kept both orders in their places whilst he
lived, and was neither hated nor despised.
  But Pertinax was created emperor against the wishes of the soldiers,
who, being accustomed to live licentiously under Commodus, could not
endure the honest life to which Pertinax wished to reduce them;
thus, having given cause for hatred, to which hatred there was added
contempt for his old age, he was overthrown at the very beginning of
his administration. And here it should be noted that hatred is
acquired as much by good works as by bad ones, therefore, as I said
before, a prince wishing to keep his state is very often forced to
do evil; for when that body is corrupt whom you think you have need of
to maintain yourself- it may be either the people or the soldiers or
the nobles- you have to submit to its humours and to gratify them, and
then good works will do you harm.
  But let us come to Alexander, who was a man of such great
goodness, that among the other praises which are accorded him is this,
that in the fourteen years he held the empire no one was ever put to
death by him unjudged; nevertheless, being considered effeminate and a
man who allowed himself to be governed by his mother, he became
despised, the army conspired against him, and murdered him.
  Turning now to the opposite characters of Commodus, Severus,
Antoninus Caracalla, and Maximinus, you will find them all cruel and
rapacious- men who, to satisfy their soldiers, did not hesitate to
commit every kind of iniquity against the people; and all, except
Severus, came to a bad end; but in Severus there was so much valour
that, keeping the soldiers friendly, although the people were
oppressed by him, he reigned successfully; for his valour made him
so much admired in the sight of the soldiers and people that the
latter were kept in a way astonished and awed and the former
respectful and satisfied. And because the actions of this man, as a
new prince, were great, I wish to show briefly that he knew well how
to counterfeit the fox and the lion, which natures, as I said above,
it is necessary for a prince to imitate.
  Knowing the sloth of the Emperor Julian, he persuaded the army in
Sclavonia, of which he was captain, that it would be right to go to
Rome and avenge the death of Pertinax, who had been killed by the
praetorian soldiers; and under this pretext, without appearing to
aspire to the throne, he moved the army on Rome, and reached Italy
before it was known that he had started. On his arrival at Rome, the
Senate, through fear, elected him emperor and killed Julian. After
this there remained for Severus, who wished to make himself master
of the whole empire, two difficulties; one in Asia, where Niger,
head of the Asiatic army, had caused himself to be proclaimed emperor;
the other in the west where Albinus was, who also aspired to the
throne. And as he considered it dangerous to declare himself hostile
to both, he decided to attack Niger and to deceive Albinus. To the
latter he wrote that, being elected emperor by the Senate, he was
willing to share that dignity with him and sent him the title of
Caesar; and, moreover, that the Senate had made Albinus his colleague;
which things were accepted by Albinus as true. But after Severus had
conquered and killed Niger, and settled oriental affairs, he
returned to Rome and complained to the Senate that Albinus, little
recognizing the benefits that he had received from him, had by
treachery sought to murder him, and for this ingratitude he was
compelled to punish him. Afterwards he sought him out in France, and
took from him his government and life. He who will, therefore,
carefully examine the actions of this man will find him a most valiant
lion and a most cunning fox; he will find him feared and respected
by every one, and not hated by the army; and it need not be wondered
at that he, the new man, well, because his supreme renown always
protected him from that hatred which the people might have conceived
against him for his violence.
  But his son Antoninus was a most eminent man, and had very excellent
qualities, which made him admirable in the sight of the people and
acceptable to the soldiers, for he was a warlike man, most enduring of
fatigue, a despiser of all delicate food and other luxuries, which
caused him to be beloved by the armies. Nevertheless, his ferocity and
cruelties were so great and so unheard of that, after endless single
murders, he killed a large number of the people of Rome and all
those of Alexandria. He became hated by the whole world, and also
feared by those he had around him, to such an extent that he was
murdered in the midst of his army by a centurion. And here it must
be noted that such-like deaths, which are deliberately inflicted
with a resolved and desperate courage, cannot be avoided by princes,
because any one who does not fear to die can inflict them; but a
prince may fear them the less because they are very rare; he has
only to be careful not to do any grave injury to those whom he employs
or has around him in the service of the state. Antoninus had not taken
this care, but had contumeliously killed a brother of that
centurion, whom also he daily threatened, yet retained in his
bodyguard; which, as it turned out, was a rash thing to do, and proved
the emperor's ruin.
  But let us come to Commodus, to whom it should have been very easy
to hold the empire, for, being the son of Marcus, he had inherited it,
and he had only to follow in the footsteps of his father to please his
people and soldiers; but, being by nature cruel and brutal, he gave
himself up to amusing the soldiers and corrupting them, so that he
might indulge his rapacity upon the people; on the other hand, not
maintaining his dignity, often descending to the theatre to compete
with gladiators, and doing other vile things, little worthy of the
imperial majesty, he fell into contempt with the soldiers, and being
hated by one party and despised by the other, he was conspired against
and killed.
  It remains to discuss the character of Maximinus. He was a very
warlike man, and the armies, being disgusted with the effeminacy of
Alexander, of whom I have already spoken, killed him and elected
Maximinus to the throne. This he did not possess for long, for two
things made him hated and despised; the one, his having kept sheep
in Thrace, which brought him into contempt (it being well known to
all, and considered a great indignity by every one), and the other,
his having at the accession to his dominions deferred going to Rome
and taking possession of the imperial seat; he had also gained a
reputation for the utmost ferocity by having, through his prefects
in Rome and elsewhere in the empire, practised many cruelties, so that
the whole world was moved to anger at the meanness of his birth and to
fear at his barbarity. First Africa rebelled, then the Senate with all
the people of Rome, and all Italy conspired against him, to which
may be added his own army: this latter, besieging Aquileia and meeting
with difficulties in taking it, were disgusted with his cruelties, and
fearing him less when they found so many against him, murdered him.
  I do not wish to discuss Heliogabalus, Macrinus, or Julian, who,
being thoroughly contemptible, were quickly wiped out; but I will
bring this discourse to a conclusion by saying that princes in our
times have this difficulty of giving inordinate satisfaction to
their soldiers in a far less degree, because, notwithstanding one
has to give them some indulgence, that is soon done; none of these
princes have armies that are veterans in the governance and
administration of provinces, as were the armies of the Roman Empire;
and whereas it was then more necessary to give satisfaction to the
soldiers than to the people, it is now more necessary to all
princes, except the Turk and the Soldan, to satisfy the people
rather than the soldiers, because the people are the more powerful.
  From the above I have excepted the Turk, who always keeps round
him twelve infantry and fifteen thousand cavalry on which depend the
security and strength of the kingdom, and it is necessary that,
putting aside every consideration for the people, he should keep
them his friends. The kingdom of the Soldan is similar; being entirely
in the hands of soldiers, follows again that, without regard to the
people, he must keep them his friends. But you must note that the
state of the Soldan is unlike all other principalities, for the reason
that it is like the Christian pontificate, which cannot be called
either an hereditary or a newly formed principality; because the
sons of the old prince not the heirs, but he who is elected to that
position by those who have authority, and the sons remain only
noblemen. And this being an ancient custom, it cannot be called a
new principality, because there are none of those difficulties in it
that are met with in new ones; for although the prince is new, the
constitution of the state is old, and it is framed so as to receive
him as if he were its hereditary lord.
  But returning to the subject of our discourse, I say that whoever
will consider it will acknowledge that either hatred or contempt has
been fatal to the above-named emperors, and it will be recognized also
how it happened that, a number of them acting in one way and a
number in another, only one in each way came to a happy end and the
rest to unhappy ones. Because it would have been useless and dangerous
for Pertinax and Alexander, being new princes, to imitate Marcus,
who was heir to the principality; and likewise it would have been
utterly destructive to Caracalla, Commodus, and Maximinus to have
imitated Severus, they not having sufficient valour to enable them
to tread in his footsteps. Therefore a prince, new to the
principality, cannot imitate the actions of Marcus, nor, again, is
it necessary to follow those of Severus, but he ought to take from
Severus those parts which are necessary to found his state, and from
Marcus those which are proper and glorious to keep a state that may
already be stable and firm.
                              CHAPTER XX
            ARE FORTRESSES, AND MANY OTHER THINGS TO WHICH
            PRINCES OFTEN RESORT, ADVANTAGEOUS OR HURTFUL?

  1. SOME princes, so as to hold securely the state, have disarmed
their subjects; others have kept their subject towns by factions;
others have fostered enmities against themselves; others have laid
themselves out to gain over those whom they distrusted in the
beginning of their governments; some have built fortresses; some
have overthrown and destroyed them. And although one cannot give a
final judgment on all one of these things unless one possesses the
particulars of those states in which a decision has to be made,
nevertheless I will speak as comprehensively as the matter of itself
will admit.
  2. There never was a new prince who has disarmed his subjects;
rather when he has found them disarmed he has always armed them,
because, by arming them, those arms become yours, those men who were
distrusted become faithful, and those who were faithful are kept so,
and your subjects become your adherents. And whereas all subjects
cannot be armed, yet when those whom you do arm are benefited, the
others can be handled more freely, and this difference in their
treatment, which they quite understand, makes the former your
dependants, and the latter, considering it to be necessary that
those who have the most danger and service should have the most
reward, excuse you. But when you disarm them, you at once offend
them by showing that you distrust them, either for cowardice or for
want of loyalty, and either of these opinions breeds hatred against
you. And because you cannot remain unarmed, it follows that you turn
to mercenaries, which are of the character already shown; even if they
should be good they would not be sufficient to defend you against
powerful enemies and distrusted subjects. Therefore, as I have said, a
new prince in a new principality has always distributed arms.
Histories are full of examples. But when a prince acquires a new
state, which he adds as a province to his old one, then it is
necessary to disarm the men of that state, except those who have
been his adherents in acquiring it; and these again, with time and
opportunity, should be rendered soft and effeminate; and matters
should be managed in such a way that all the armed men in the state
shall be your own soldiers who in your old state were living near you.
  3. Our forefathers, and those who were reckoned wise, were
accustomed to say that it was necessary to hold Pistoia by factions
and Pisa by fortresses; and with this idea they fostered quarrels in
some of their tributary towns so as to keep possession of them the
more easily. This may have been well enough in those times when
Italy was in a way balanced, but I do not believe that it can be
accepted as a precept for to-day, because I do not believe that
factions can ever be of use; rather it is certain that when the
enemy comes upon you in divided cities you are quickly lost, because
the weakest party will always assist the outside forces and the
other will not be able to resist. The Venetians, moved, as I
believe, by the above reasons, fostered the Guelph and Ghibelline
factions in their tributary cities; and although they never allowed
them to come to bloodshed, yet they nursed these disputes amongst
them, so that the citizens, distracted by their differences, should
not unite against them. Which, as we saw, did not afterwards turn
out as expected, because, after the rout at Vaila, one party at once
took courage and seized the state. Such methods argue, therefore,
weakness in the prince, because these factions will never be permitted
in a vigorous principality; such methods for enabling one the more
easily to manage subjects are only useful in times of peace, but if
war comes this policy proves fallacious.
  4. Without doubt princes become great when they overcome the
difficulties and obstacles by which they are confronted, and therefore
fortune, especially when she desires to make a new prince great, who
has a greater necessity to earn renown than an hereditary one,
causes enemies to arise and form designs against him, in order that he
may have the opportunity of overcoming them, and by them to mount
higher, as by a ladder which his enemies have raised. For this
reason many consider that a wise prince, when he has the
opportunity, ought with craft to foster some animosity against
himself, so that, having crushed it, his renown may rise higher.
  5. Princes, especially new ones, have found more fidelity and
assistance in those men who in the beginning of their rule were
distrusted than among those who in the beginning were trusted.
Pandolfo Petrucci, Prince of Siena, ruled his state more by those
who had been distrusted than by others. But on this question one
cannot speak generally, for it varies so much with the individual; I
will only say this, that those men who at the commencement of a
princedom have been hostile, if they are of a description to need
assistance to support themselves, can always be gained over with the
greatest ease, and they will be tightly held to serve the prince
with fidelity, inasmuch as they know it to be very necessary for
them to cancel by deeds the bad impression which he had formed of
them; and thus the prince always extracts more profit from them than
from those who, serving him in too much security, may neglect his
affairs. And since the matter demands it, I must not fail to warn a
prince, who by means of secret favours has acquired a new state,
that he must well consider the reasons which induced those to favour
him who did so; and if it be not a natural affection towards him,
but only discontent with their government, then he will only keep them
friendly with great trouble and difficulty, for it will be
impossible to satisfy them. And weighing well the reasons for this
in those examples which can be taken from ancient and modern
affairs, we shall find that it is easier for the prince to make
friends of those men who were contented under the former government,
and are therefore his enemies, than of those who, being discontented
with it, were favourable to him and encouraged him to seize it.
  6. It has been a custom with princes, in order to hold their
states more securely, to build fortresses that may serve as a bridle
and bit to those who might design to work against them, and as a place
of refuge from a first attack. I praise this system because it has
been made use of formerly. Notwithstanding that, Messer Nicolo Vitelli
in our times has been seen to demolish two fortresses in Citta di
Castello so that he might keep that state; Guidubaldo, Duke of Urbino,
on returning to his dominion, whence he had been driven by Cesare
Borgia, razed to the foundations all the fortresses in that
province, and considered that without them it would be more
difficult to lose it; the Bentivoglio returning to Bologna came to a
similar decision. Fortresses, therefore, are useful or not according
to circumstances; if they do you good in one way they injure you in
another. And this question can be reasoned thus: the prince who has
more to fear from the people than from foreigners ought to build
fortresses, but he who has more to fear from foreigners than from
the people ought to leave them alone. The castle of Milan, built by
Francesco Sforza, has made, and will make, more trouble for the
house of Sforza than any other disorder in the state. For this
reason the best possible fortress is- not to be hated by the people,
because, although you may hold the fortresses, yet they will not
save you if the people hate you, for there will never be wanting
foreigners to assist a people who have taken arms against you. It
has not been seen in our times that such fortresses have been of use
to any prince, unless to the Countess of Forli, when the Count
Girolamo, her consort, was killed; for by that means she was able to
withstand the popular attack and wait for assistance from Milan, and
thus recover her state; and the posture of affairs was such at that
time that the foreigners could not assist the people. But fortresses
were of little value to her afterwards when Cesare Borgia attacked
her, and when the people, her enemy, were allied with foreigners.
Therefore it would have been safer for her, both then and before,
not to have been hated by the people than to have had the fortresses.
All these things considered then, I shall praise him who builds
fortresses as well as him who does not, and I shall blame whoever,
trusting in them, cares little about being hated by the people.
                             CHAPTER XXI
                 HOW A PRINCE SHOULD CONDUCT HIMSELF
                         SO AS TO GAIN RENOWN

  NOTHING makes a prince so much esteemed as great enterprises and
setting a fine example. We have in our time Ferdinand of Aragon, the
present King of Spain. He can almost be called a new prince, because
he has risen, by fame and glory, from being an insignificant king to
be the foremost king in Christendom; and if you will consider his
deeds you will find them all great and some of them extraordinary.
In the beginning of his reign he attacked Granada, and this enterprise
was the foundation of his dominions. He did this quietly at first
and without any fear of hindrance, for he held the minds of the barons
of Castile occupied in thinking of the war and not anticipating any
innovations; thus they did not perceive that by these means he was
acquiring power and authority over them. He was able with the money of
the Church and of the people to sustain his armies, and by that long
war to lay the foundation for the military skill which has since
distinguished him. Further, always using religion as a plea, so as
to undertake greater schemes, he devoted himself with a pious
cruelty to driving out and clearing his kingdom of the Moors; nor
could there be a more admirable example, nor one more rare. Under this
same cloak he assailed Africa, he came down on Italy, he has finally
attacked France; and thus his achievements and designs have always
been great, and have kept the minds of his people in suspense and
admiration and occupied with the issue of them. And his actions have
arisen in such a way, one out of the other, that men have never been
given time to work steadily against him.
  Again, it much assists a prince to set unusual examples in
internal affairs, similar to those which are related of Messer Bernabo
da Milano, who, when he had the opportunity, by any one in civil
life doing some extraordinary thing, either good or bad, would take
some method of rewarding or punishing him, which would be much
spoken about. And a prince ought, above all things, always to
endeavour in every action to gain for himself the reputation of
being a great and remarkable man.
  A prince is also respected when he is either a true friend or a
downright enemy, that to say, when, without any reservation, he
declares himself in favour of one party against the other; which
course will always be more advantageous than standing neutral; because
if two of your powerful neighbours come to blows, they are of such a
character that, if one of them conquers, you have either to fear him
or not. In either case it will always be more advantageous for you
to declare yourself and to make war strenuously; because, in the first
case, if you do not declare yourself, you will invariably fall a
prey to the conqueror, to the pleasure and satisfaction of him who has
been conquered, and you will have no reasons to offer, nor anything to
protect or to shelter you. Because he who conquers does not want
doubtful friends who will not aid him in the time of trial; and he who
loses will not harbour you because you did not willingly, sword in
hand, court his fate.
  Antiochus went into Greece, being sent for by the Aetolians to drive
out the Romans. He sent envoys to the Achaeans, who were friends of
the Romans, exhorting them to remain neutral; and on the other hand
the Romans urged them to take up arms. This question came to be
discussed in the council of the Achaeans, where the legate of
Antiochus urged them to stand neutral. To this the Roman legate
answered: "As for that which has been said, that it is better and more
advantageous for your state not to interfere in our war, nothing can
be more erroneous; because by not interfering you will be left,
without favour or consideration, the guerdon of the conqueror." Thus
it will always happen that he who is not your friend will demand
your neutrality, whilst he who is your friend will entreat you to
declare yourself with arms. And irresolute princes, to avoid present
dangers, generally follow the neutral path, and are generally
ruined. But when a prince declares himself gallantly in favour of
one side, if the party with whom he allies himself conquers,
although the victor may be powerful and may have him at his mercy, yet
he is indebted to him, and there is established a bond of amity; and
men are never so shameless as to become a monument of ingratitude by
oppressing you. Victories after all are never so complete that the
victor must not show some regard, especially to justice. But if he
with whom you ally yourself loses, you may be sheltered by him, and
whilst he is able he may aid you, and you become companions in a
fortune that may rise again.
  In the second case, when those who fight are of such a character
that you have no anxiety as to who may conquer, so much the more is it
greater prudence to be allied, because you assist at the destruction
of one by the aid of another who, if he had been wise, would have
saved him; and conquering, as it is impossible that he should not with
your assistance, he remains at your discretion. And here it is to be
noted that a prince ought to take care never to make an alliance
with one more powerful than himself for the purpose of attacking
others, unless necessity compels him, as is said above; because if
he conquers you are at his discretion, and princes ought to avoid as
much as possible being at the discretion of any one. The Venetians
joined with France against the Duke of Milan, and this alliance, which
caused their ruin, could have been avoided. But when it cannot be
avoided, as happened to the Florentines when the Pope and Spain sent
armies to attack Lombardy, then in such a case, for the above reasons,
the prince ought to favour one of the parties.
  Never let any Government imagine that it can choose perfectly safe
courses; rather let it expect to have to take very doubtful ones,
because it is found in ordinary affairs that one never seeks to
avoid one trouble without running into another; but prudence
consists in knowing how to distinguish the character of troubles,
and for choice to take the lesser evil.
  A prince ought also to show himself a patron of ability, and to
honour the proficient in every art. At the same time he should
encourage his citizens to practise their callings peaceably, both in
commerce and agriculture, and in every other following, so that the
one should not be deterred from improving his possessions for fear
lest they be taken away from him or another from opening up trade
for fear of taxes; but the prince ought to offer rewards to whoever
wishes to do these things and designs in any way to honour his city or
state.
  Further, he ought to entertain the people with festivals and
spectacles at convenient seasons of the year; and as every city is
divided into guilds or into societies, he ought to hold such bodies in
esteem, and associate with them sometimes, and show himself an example
of courtesy and liberality; nevertheless, always maintaining the
majesty of his rank, for this he must never consent to abate in
anything.
                             CHAPTER XXII
                CONCERNING THE SECRETARIES OF PRINCES

  THE choice of servants is of no little importance to a prince, and
they are good or not according to the discrimination of the prince.
And the first opinion which one forms of a prince, and of his
understanding, is by observing the men he has around him; and when
they are capable and faithful he may always be considered wise,
because he has known how to recognize the capable and to keep them
faithful. But when they are otherwise one cannot form a good opinion
of him, for the prime error which he made was in choosing them.
  There were none who knew Messer Antonio da Venafro as the servant of
Pandolfo Petrucci, Prince of Siena, who would not consider Pandolfo to
be a very clever man in having Venafro for his servant. Because
there are three classes of intellects: one which comprehends by
itself; another which appreciates what others comprehend; and a
third which neither comprehends by itself nor by the showing of
others; the first is the most excellent, the second is good, the third
is useless. Therefore, it follows necessarily that, if Pandolfo was
not in the first rank, he was in the second, for whenever one has
judgment to know good or bad when it is said and done, although he
himself may not have the initiative, yet he can recognize the good and
the bad in his servant, and the one he can praise and the other
correct; thus the servant cannot hope to deceive him, and is kept
honest.
  But to enable a prince to form an opinion of his servant there is
one test which never falls; when you see the servant thinking more
of his own interests than of yours, and seeking inwardly his own
profit in everything, such a man will never make a good servant, nor
will you ever be able to trust him; because he who has the state of
another in his hands ought never to think of himself, but always of
his prince, and never pay any attention to matters in which the prince
is not concerned.
  On the other to keep his servant honest the prince ought to study
him, honouring him, enriching him, doing him kindnesses, sharing
with him the honours and cares; and at the same time let him see
that he cannot stand alone, so that many honours not make him desire
more, many riches make him wish for more, and that many cares may make
him dread changes. When, therefore, servants, and princes towards
servants, are thus disposed, they can trust each other, but when it is
otherwise, the end will always be disastrous for either one or the
other.
                            CHAPTER XXIII
                   HOW FLATTERERS SHOULD BE AVOIDED

  I DO NOT wish to leave out an important branch of this subject,
for it is a danger from which princes are with difficulty preserved,
unless they are very careful and discriminating. It is that of
flatterers, of whom courts arc full, because men are so
self-complacent in their own affairs, and in a way so deceived in
them, that they are preserved with difficulty from this pest, and if
they wish to defend themselves they run the danger of falling into
contempt. Because there is no other way of guarding oneself from
flatterers except letting men understand that to tell you the truth
does not offend you; but when every one may tell you the truth,
respect for you abates.
  Therefore a wise prince ought to hold a third course by choosing the
wise men in his state, and giving to them only the liberty of speaking
the truth to him, and then only of those things of which he
inquires, and of none others; but he ought to question them upon
everything, and listen to their opinions, and afterwards form his
own conclusions. With these councillors, separately and
collectively, he ought to carry himself in such a way that each of
them should know that, the more freely he shall speak, the more he
shall be preferred; outside of these, he should listen to no one,
pursue the thing resolved on, and be steadfast in his resolutions.
He who does otherwise is either overthrown by flatterers, or is so
often changed by varying opinions that he falls into contempt.
  I wish on this subject to adduce a modern example. Fra Luca, the man
of affairs to Maximilian, the present emperor, speaking of his
majesty, said: He consulted with no one, yet never got his own way
in anything. This arose because of his following a practice the
opposite to the above; for the emperor is a secretive man- he does not
communicate his designs to any one, nor does he receive opinions on
them. But as in carrying them into effect they become revealed and
known, they are at once obstructed by those men whom he has around
him, and he, being pliant, is diverted from them. Hence it follows
that those things he does one day he undoes the next, and no one
ever understands what he wishes or intends to do, and no one can
rely on his resolutions.
  A prince, therefore, ought always to take counsel, but only when
he wishes and not when others wish; he ought rather to discourage
every one from offering advice unless he asks it; but, however, he
ought to be a constant inquirer, and afterwards a patient listener
concerning the things of which he inquired; also, on learning that any
one, on any consideration, has not told him the truth, he should let
his anger be felt.
  And if there are some who think that a prince who conveys an
impression of his wisdom is not so through his own ability, but
through the good advisers that he has around him, beyond doubt they
are deceived, because this is an axiom which never fails: that a
prince who is not wise himself will never take good advice, unless
by chance he has yielded his affairs entirely to one person who
happens to be a very prudent man. In this case indeed he may be well
governed, but it would not be for long, because such a governor
would in a short time take away his state from him.
  But if a prince who is not experienced should take counsel from more
than one he will never get united counsels, nor will he know how to
unite them. Each of the counsellors will think of his own interests,
and the prince will not know how to control them or to see through
them. And they are not to be found otherwise, because men will
always prove untrue to you unless they are kept honest by
constraint. Therefore it must be inferred that good counsels,
whencesoever they come, are born of the wisdom of the prince, and
not the wisdom of the prince from good counsels.
                             CHAPTER XXIV
             THE PRINCES OF ITALY HAVE LOST THEIR STATES

  THE previous suggestions, carefully observed, will enable a new
prince to appear well established, and render him at once more
secure and fixed in the state than if he had been long seated there.
For the actions of a new prince are more narrowly observed than
those of an hereditary one, and when they are seen to be able they
gain more men and bind far tighter than ancient blood; because men are
attracted more by the present than by the past, and when they find the
present good they enjoy it and seek no further; they will also make
the utmost defence for a prince if he fails them not in other
things. Thus it will be a double glory to him to have established a
new principality, and adorned and strengthened it with good laws, good
arms, good allies, and with a good example; so will it be a double
disgrace to him who, born a prince, shall lose his state by want of
wisdom.
  And if those seigniors are considered who have lost their states
in Italy in our times, such as the King of Naples, the Duke of
Milan, and others, there will be found in them, firstly, one common
defect in regard to arms from the causes which have been discussed
at length; in the next place, some one of them will be seen, either to
have had the people hostile, or if he has had the people friendly,
he has not known how to secure the nobles. In the absence of these
defects states that have power enough to keep an army in the field
cannot be lost.
  Philip of Macedon, not the father of Alexander the Great, but he who
was conquered by Titus Quintius, had not much territory compared to
the greatness of the Romans and of Greece who attacked him, yet
being a warlike man who knew how to attract the people and secure
the nobles, he sustained the war against his enemies for many years,
and if in the end he lost the dominion of some cities, nevertheless he
retained the kingdom.
  Therefore, do not let our princes accuse fortune for the loss of
their principalities after so many years' possession, but rather their
own sloth, because in quiet times they never thought there could be
a change (it is a common defect in man not to make any provision in
the calm against the tempest), and when afterwards the bad times
came they thought of flight and not of defending themselves, and
they hoped that the people, disgusted with the insolence of the
conquerors, would recall them. This course, when others fail, may be
good, but it is very bad to have neglected all other expedients for
that, since you would never wish to fall because you trusted to be
able to find someone later on to restore you. This again either does
not happen, or, if it does, it will not be for your security,
because that deliverance is of no avail which does not depend upon
yourself; those only are reliable, certain, and durable that depend on
yourself and your valour.
                             CHAPTER XXV
              WHAT FORTUNE CAN EFFECT IN HUMAN AFFAIRS,
                       AND HOW TO WITHSTAND HER

  IT is not unknown to me how many men have had, and still have, the
opinion that the affairs of the world are in such wise governed by
fortune and by God that men with their wisdom cannot direct them and
that no one can even help them; and because of this they would have us
believe that it is not necessary to labour much in affairs, but to let
chance govern them. This opinion has been more credited in our times
because of the great changes in affairs which have been seen, and
may still be seen, every day, beyond all human conjecture. Sometimes
pondering over this, I am in some degree inclined to their opinion.
Nevertheless, not to extinguish our free will, I hold it to be true
that Fortune is the arbiter of one-half of our actions, but that she
still leaves us to direct the other half, or perhaps a little less.
  I compare her to one of those raging rivers, which when in flood
overflows the plains, sweeping away trees and buildings, bearing
away the soil from place to place; everything flies before it, all
yield to its violence, without being able in any way to withstand
it; and yet, though its nature be such, it does not follow therefore
that men, when the weather becomes fair, shall not make provision,
both with defences and barriers, in such a manner that, rising
again, the waters may pass away by canal, and their force be neither
so unrestrained nor so dangerous. So it happens with fortune, who
shows her power where valour has not prepared to resist her, and
thither she turns her forces where she knows that barriers and
defences have not been raised to constrain her.
  And if you will consider Italy, which is the seat of these
changes, and which has given to them their impulse, you will see it to
be an open country without barriers and without any defence. For if it
had been defended by proper valour, as are Germany, Spain, and France,
either this invasion would not have made the great changes it has made
or it would not have come at all. And this I consider enough to say
concerning resistance to fortune in general.
  But confining myself more to the particular, I say that a prince may
be seen happy to-day and ruined to-morrow without having shown any
change of disposition or character. This, I believe, arises firstly
from causes that have already been discussed at length, namely, that
the prince who relies entirely upon fortune is lost when it changes. I
believe also that he will be successful who directs his actions
according to the spirit of the times, and that he whose actions do not
accord with the times will not be successful. Because men are seen, in
affairs that lead to the end which every man has before him, namely,
glory and riches, to get there by various methods; one with caution,
another with haste; one by force, another by skill; one by patience,
another by its opposite; and each one succeeds in reaching the goal by
a different method. One can also see of two cautious men the one
attain his end, the other fail; and similarly, two men by different
observances are equally successful, the one being cautious, the
other impetuous; all this arises from nothing else than whether or not
they conform in their methods to the spirit of the times. This follows
from what I have said, that two men working differently bring about
the same effect, and of two working similarly, one attains his
object and the other does not.
  Changes in estate also issue from this, for if, to one who governs
himself with caution and patience, times and affairs converge in
such a way that his administration is successful, his fortune is made;
but if times and affairs change, he is ruined if he does not change
his course of action. But a man is not often found sufficiently
circumspect to know how to accommodate himself to the change, both
because he cannot deviate from what nature inclines him to, and also
because, having always prospered by acting in one way, he cannot be
persuaded that it is well to leave it; and, therefore, the cautious
man, when it is time to turn adventurous, does not know how to do
it, hence he is ruined; but had he changed his conduct with the
times fortune would not have changed.
  Pope Julius II went to work impetuously in all his affairs, and
found the times and circumstances conform so well to that line of
action that he always met with success. Consider his first
enterprise against Bologna, Messer Giovanni Bentivogli being still
alive. The Venetians were not agreeable to it, nor was the King of
Spain, and he had the enterprise still under discussion with the
King of France; nevertheless he personally entered upon the expedition
with his accustomed boldness and energy, a move which made Spain and
the Venetians stand irresolute and passive, the latter from fear,
the former from desire to recover all the kingdom of Naples; on the
other hand, he drew after him the King of France, because that king,
having observed the movement, and desiring to make the Pope his friend
so as to humble the Venetians, found it impossible to refuse him
soldiers without manifestly offending him. Therefore Julius with his
impetuous action accomplished what no other pontiff with simple
human wisdom could have done; for if he had waited in Rome until he
could get away, with his plans arranged and everything fixed, as any
other pontiff would have done, he would never have succeeded.
Because the King of France would have made a thousand excuses, and the
others would have raised a thousand fears.
  I will leave his other actions alone, as they were all alike, and
they all succeeded, for the shortness of his life did not let him
experience the contrary; but if circumstances had arisen which
required him to go cautiously, his ruin would have followed, because
he would never have deviated from those ways to which nature
inclined him.
  I conclude therefore that, fortune being changeful and mankind
steadfast in their ways, so long as the two are in agreement men are
successful, but unsuccessful when they fall out. For my part I
consider that it is better to be adventurous than cautious, because
fortune is a woman, and if you wish to keep her under it is
necessary to beat and ill-use her; and it is seen that she allows
herself to be mastered by the adventurous rather than by those who
go to work more coldly. She is, therefore, always, woman-like, a lover
of young men, because they are less cautious, more violent, and with
more audacity command her.
                             CHAPTER XXVI
         AN EXHORTATION TO LIBERATE ITALY FROM THE BARBARIANS

  HAVING carefully considered the subject of the above discourses, and
wondering within myself whether the present times were propitious to a
new prince, and whether there were the elements that would give an
opportunity to a wise and virtuous one to introduce a new order of
things which would do honour to him and good to the people of this
country, it appears to me that so many things concur to favour a new
prince that I never knew a time more fit than the present.
  And if, as I said, it was necessary that the people of Israel should
be captive so as to make manifest the ability of Moses; that the
Persians should be oppressed by the Medes so as to discover the
greatness of the soul of Cyrus; and that the Athenians should be
dispersed to illustrate the capabilities of Theseus: then at the
present time, in order to discover the virtue of an Italian spirit, it
was necessary that Italy should be reduced to the extremity she is now
in, that she should be more enslaved than the Hebrews, more
oppressed than the Persians, more scattered than the Athenians;
without head, without order, beaten, despoiled, torn, overrun; and
to have endured every kind of desolation.
  Although lately some spark may have been shown by one, which made us
think he was ordained by God for our redemption, nevertheless it was
afterwards seen, in the height of his career, that fortune rejected
him; so that Italy, left as without life, waits for him who shall
yet heal her wounds and put an end to the ravaging and plundering of
Lombardy, to the swindling and taxing of the kingdom and of Tuscany,
and cleanse those sores that for long have festered. It is seen how
she entreats God to send someone who shall deliver her from these
wrongs and barbarous insolencies. It is seen also that she is ready
and willing to follow a banner if only someone will raise it.
  Nor is there to be seen at present one in whom she can place more
hope than in your illustrious house, with its valour and fortune,
favoured by God and by the Church of which it is now the chief, and
which could be made the head of this redemption. This will not be
difficult if you will recall to yourself the actions and lives of
the men I have named. And although they were great and wonderful
men, yet they were men, and each one of them had no more opportunity
than the present offers, for their enterprises were neither more
just nor easier than this, nor was God more their friend than He is
yours.
  With us there is great justice, because that war is just which is
necessary, and arms are hallowed when there is no other hope but in
them. Here there is the greatest willingness, and where the
willingness is great the difficulties cannot be great if you will only
follow those men to whom I have directed your attention. Further
than this, how extraordinarily the ways of God have been manifested
beyond example: the sea is divided, a cloud has led the way, the
rock has poured forth water, it has rained manna, everything has
contributed to your greatness; you ought to do the rest. God is not
willing to do everything, and thus take away our free will and that
share of glory which belongs to us.
  And it is not to be wondered at if none of the above-named
Italians have been able to accomplish all that is expected from your
illustrious house; and if in so many revolutions in Italy, and in so
many campaigns, it has always appeared as if military virtue were
exhausted, this has happened because the old order of things was not
good, and none of us have known how to find a new one. And nothing
honours a man more than to establish new laws and new ordinances
when he himself was newly risen. Such things when they are well
founded and dignified will make him revered and admired, and in
Italy there are not wanting opportunities to bring such into use in
every form.
  Here there is great valour in the limbs whilst it fails in the head.
Look attentively at the duels and the hand-to-hand combats, how
superior the Italians are in strength, dexterity, and subtlety. But
when it comes to armies they do not bear comparison, and this
springs entirely from the insufficiency of the leaders, since those
who are capable are not obedient, and each one seems to himself to
know, there having never been any one so distinguished above the rest,
either by valour or fortune, that others would yield to him. Hence
it is that for so long a time, and during so much fighting in the past
twenty years, whenever there has been an army wholly Italian, it has
always given a poor account of itself; as witness Taro, Alessandria,
Capua, Genoa, Vaila, Bologna, Mestre.
  If, therefore, your illustrious house wishes to follow those
remarkable men who have redeemed their country, it is necessary before
all things, as a true foundation for every enterprise, to be
provided with your own forces, because there can be no more
faithful, truer, or better soldiers. And although singly they are
good, altogether they will be much better when they find themselves
commanded by their prince, honoured by him, and maintained at his
expense. Therefore it is necessary to be prepared with such arms, so
that you can be defended against foreigners by Italian valour.
  And although Swiss and Spanish infantry may be considered very
formidable, nevertheless there is a defect in both, by reason of which
a third order would not only be able to oppose them, but might be
relied upon to overthrow them. For the Spaniards cannot resist
cavalry, and the Switzers are afraid of infantry whenever they
encounter them in close combat. Owing to this, as has been and may
again be seen, the Spaniards are unable to resist French cavalry,
and the Switzers are overthrown by infantry. And although a complete
proof of this latter cannot be shown, nevertheless there was some
evidence of it at the battle of Ravenna, when the Spanish infantry
were confronted by German battalions, who follow the same tactics as
the Swiss; when the Spaniards, by agility of body and with the aid
of their shields, got in under the pikes of the Germans and stood
out of danger, able to attack, while the Germans stood helpless,
and, if the cavalry had not dashed up, all would have been over with
them. It is possible, therefore, knowing the defects of both these
infantries, to invent a new one, which will resist cavalry and not
be afraid of infantry; this need not create a new order of arms, but a
variation upon the old. And these are the kind of improvements which
confer reputation and power upon a new prince.
  This opportunity, therefore, ought not to be allowed to pass for
letting Italy at last see her liberator appear. Nor can one express
the love with which he would be received in all those provinces
which have suffered so much from these foreign scourings, with what
thirst for revenge, with what stubborn faith, with what devotion, with
what tears. What door would be closed to him? Who would refuse
obedience to him? What envy would hinder him? What Italian would
refuse him homage? To all of us this barbarous dominion stinks. Let,
therefore, your illustrious house take up this charge with that
courage and hope with which all just enterprises are undertaken, so
that under its standard our native country may be ennobled, and
under its auspices may be verified that saying of Petrarch:

                Virtu contro al Furore
              Prendera l'arme, e fia il combatter corto:
                Che l'antico valore
              Negli italici cuor non e ancor morto.*

  * Virtue against fury shall advance the fight,
    And it i' th' combat soon shall put to flight;
    For the old Roman, valour is not dead,
    Nor in th' Italians' breasts extinguished.


                               THE END


