
﻿ II . Proletarians and Communists In what relation do the Communists stand to the proletarians as a whole ? The Communists do not form a separate party opposed to the other working-class parties . They have no interests separate and apart from those of the proletariat as a whole . They do not set up any sectarian principles of their own , by which to shape and mould the proletarian movement . The Communists are distinguished from the other working-class parties by this only : 1. In the national struggles of the proletarians of the different countries , they point out and bring to the front the common interests of the entire proletariat , independently of all nationality . 2. In the various stages of development which the struggle of the working class against the bourgeoisie has to pass through , they always and everywhere represent the interests of the movement as a whole . The Communists , therefore , are on the one hand , practically , the most advanced and resolute section of the working-class parties of every country , that section which pushes forward all others ; on the other hand , theoretically , they have over the great mass of the proletariat the advantage of clearly understanding the line of march , the conditions , and the ultimate general results of the proletarian movement . The immediate aim of the Communists is the same as that of all other proletarian parties : formation of the proletariat into a class , overthrow of the bourgeois supremacy , conquest of political power by the proletariat . The theoretical conclusions of the Communists are in no way based on ideas or principles that have been invented , or discovered , by this or that would-be universal reformer . They merely express , in general terms , actual relations springing from an existing class struggle , from a historical movement going on under our very eyes . The abolition of existing property relations is not at all a distinctive feature of communism . All property relations in the past have continually been subject to historical change consequent upon the change in historical conditions . The French Revolution , for example , abolished feudal property in favour of bourgeois property . The distinguishing feature of Communism is not the abolition of property generally , but the abolition of bourgeois property . But modern bourgeois private property is the final and most complete expression of the system of producing and appropriating products , that is based on class antagonisms , on the exploitation of the many by the few . In this sense , the theory of the Communists may be summed up in the single sentence : Abolition of private property . We Communists have been reproached with the desire of abolishing the right of personally acquiring property as the fruit of a man’s own labour , which property is alleged to be the groundwork of all personal freedom , activity and independence . Hard-won , self-acquired , self-earned property ! Do you mean the property of petty artisan and of the small peasant , a form of property that preceded the bourgeois form ? There is no need to abolish that ; the development of industry has to a great extent already destroyed it , and is still destroying it daily . Or do you mean the modern bourgeois private property ? But does wage-labour create any property for the labourer ? Not a bit . It creates capital , i. e. , that kind of property which exploits wage-labour , and which cannot increase except upon condition of begetting a new supply of wage-labour for fresh exploitation . Property , in its present form , is based on the antagonism of capital and wage labour . Let us examine both sides of this antagonism . To be a capitalist , is to have not only a purely personal , but a social status in production . Capital is a collective product , and only by the united action of many members , nay , in the last resort , only by the united action of all members of society , can it be set in motion . Capital is therefore not only personal ; it is a social power . When , therefore , capital is converted into common property , into the property of all members of society , personal property is not thereby transformed into social property . It is only the social character of the property that is changed . It loses its class character . Let us now take wage-labour . The average price of wage-labour is the minimum wage , i. e. , that quantum of the means of subsistence which is absolutely requisite to keep the labourer in bare existence as a labourer . What , therefore , the wage-labourer appropriates by means of his labour , merely suffices to prolong and reproduce a bare existence . We by no means intend to abolish this personal appropriation of the products of labour , an appropriation that is made for the maintenance and reproduction of human life , and that leaves no surplus wherewith to command the labour of others . All that we want to do away with is the miserable character of this appropriation , under which the labourer lives merely to increase capital , and is allowed to live only in so far as the interest of the ruling class requires it . In bourgeois society , living labour is but a means to increase accumulated labour . In Communist society , accumulated labour is but a means to widen , to enrich , to promote the existence of the labourer . In bourgeois society , therefore , the past dominates the present ; in Communist society , the present dominates the past . In bourgeois society capital is independent and has individuality , while the living person is dependent and has no individuality . And the abolition of this state of things is called by the bourgeois , abolition of individuality and freedom ! And rightly so . The abolition of bourgeois individuality , bourgeois independence , and bourgeois freedom is undoubtedly aimed at . By freedom is meant , under the present bourgeois conditions of production , free trade , free selling and buying . But if selling and buying disappears , free selling and buying disappears also . This talk about free selling and buying , and all the other “ brave words ” of our bourgeois about freedom in general , have a meaning , if any , only in contrast with restricted selling and buying , with the fettered traders of the Middle Ages , but have no meaning when opposed to the Communistic abolition of buying and selling , of the bourgeois conditions of production , and of the bourgeoisie itself . You are horrified at our intending to do away with private property . But in your existing society , private property is already done away with for nine-tenths of the population ; its existence for the few is solely due to its non-existence in the hands of those nine-tenths . You reproach us , therefore , with intending to do away with a form of property , the necessary condition for whose existence is the non-existence of any property for the immense majority of society . In one word , you reproach us with intending to do away with your property . Precisely so ; that is just what we intend . From the moment when labour can no longer be converted into capital , money , or rent , into a social power capable of being monopolised , i. e. , from the moment when individual property can no longer be transformed into bourgeois property , into capital , from that moment , you say , individuality vanishes . You must , therefore , confess that by “ individual ” you mean no other person than the bourgeois , than the middle-class owner of property . This person must , indeed , be swept out of the way , and made impossible . Communism deprives no man of the power to appropriate the products of society ; all that it does is to deprive him of the power to subjugate the labour of others by means of such appropriations . It has been objected that upon the abolition of private property , all work will cease , and universal laziness will overtake us . According to this , bourgeois society ought long ago to have gone to the dogs through sheer idleness ; for those of its members who work , acquire nothing , and those who acquire anything do not work . The whole of this objection is but another expression of the tautology : that there can no longer be any wage-labour when there is no longer any capital . All objections urged against the Communistic mode of producing and appropriating material products , have , in the same way , been urged against the Communistic mode of producing and appropriating intellectual products . Just as , to the bourgeois , the disappearance of class property is the disappearance of production itself , so the disappearance of class culture is to him identical with the disappearance of all culture . That culture , the loss of which he laments , is , for the enormous majority , a mere training to act as a machine . But don’t wrangle with us so long as you apply , to our intended abolition of bourgeois property , the standard of your bourgeois notions of freedom , culture , law , &c . Your very ideas are but the outgrowth of the conditions of your bourgeois production and bourgeois property , just as your jurisprudence is but the will of your class made into a law for all , a will whose essential character and direction are determined by the economical conditions of existence of your class . The selfish misconception that induces you to transform into eternal laws of nature and of reason , the social forms springing from your present mode of production and form of property – historical relations that rise and disappear in the progress of production – this misconception you share with every ruling class that has preceded you . What you see clearly in the case of ancient property , what you admit in the case of feudal property , you are of course forbidden to admit in the case of your own bourgeois form of property . Abolition [ Aufhebung ] of the family ! Even the most radical flare up at this infamous proposal of the Communists . On what foundation is the present family , the bourgeois family , based ? On capital , on private gain . In its completely developed form , this family exists only among the bourgeoisie . But this state of things finds its complement in the practical absence of the family among the proletarians , and in public prostitution . The bourgeois family will vanish as a matter of course when its complement vanishes , and both will vanish with the vanishing of capital . Do you charge us with wanting to stop the exploitation of children by their parents ? To this crime we plead guilty . But , you say , we destroy the most hallowed of relations , when we replace home education by social . And your education ! Is not that also social , and determined by the social conditions under which you educate , by the intervention direct or indirect , of society , by means of schools , &c . ? The Communists have not invented the intervention of society in education ; they do but seek to alter the character of that intervention , and to rescue education from the influence of the ruling class . The bourgeois clap-trap about the family and education , about the hallowed co-relation of parents and child , becomes all the more disgusting , the more , by the action of Modern Industry , all the family ties among the proletarians are torn asunder , and their children transformed into simple articles of commerce and instruments of labour . But you Communists would introduce community of women , screams the bourgeoisie in chorus . The bourgeois sees his wife a mere instrument of production . He hears that the instruments of production are to be exploited in common , and , naturally , can come to no other conclusion that the lot of being common to all will likewise fall to the women . He has not even a suspicion that the real point aimed at is to do away with the status of women as mere instruments of production . For the rest , nothing is more ridiculous than the virtuous indignation of our bourgeois at the community of women which , they pretend , is to be openly and officially established by the Communists . The Communists have no need to introduce community of women ; it has existed almost from time immemorial . Our bourgeois , not content with having wives and daughters of their proletarians at their disposal , not to speak of common prostitutes , take the greatest pleasure in seducing each other’s wives . Bourgeois marriage is , in reality , a system of wives in common and thus , at the most , what the Communists might possibly be reproached with is that they desire to introduce , in substitution for a hypocritically concealed , an openly legalised community of women . For the rest , it is self-evident that the abolition of the present system of production must bring with it the abolition of the community of women springing from that system , i. e. , of prostitution both public and private . The Communists are further reproached with desiring to abolish countries and nationality . The working men have no country . We cannot take from them what they have not got . Since the proletariat must first of all acquire political supremacy , must rise to be the leading class of the nation , must constitute itself the nation , it is so far , itself national , though not in the bourgeois sense of the word . National differences and antagonism between peoples are daily more and more vanishing , owing to the development of the bourgeoisie , to freedom of commerce , to the world market , to uniformity in the mode of production and in the conditions of life corresponding thereto . The supremacy of the proletariat will cause them to vanish still faster . United action , of the leading civilised countries at least , is one of the first conditions for the emancipation of the proletariat . In proportion as the exploitation of one individual by another will also be put an end to , the exploitation of one nation by another will also be put an end to . In proportion as the antagonism between classes within the nation vanishes , the hostility of one nation to another will come to an end . The charges against Communism made from a religious , a philosophical and , generally , from an ideological standpoint , are not deserving of serious examination . Does it require deep intuition to comprehend that man’s ideas , views , and conception , in one word , man’s consciousness , changes with every change in the conditions of his material existence , in his social relations and in his social life ? What else does the history of ideas prove , than that intellectual production changes its character in proportion as material production is changed ? The ruling ideas of each age have ever been the ideas of its ruling class . When people speak of the ideas that revolutionise society , they do but express that fact that within the old society the elements of a new one have been created , and that the dissolution of the old ideas keeps even pace with the dissolution of the old conditions of existence . When the ancient world was in its last throes , the ancient religions were overcome by Christianity . When Christian ideas succumbed in the 18th century to rationalist ideas , feudal society fought its death battle with the then revolutionary bourgeoisie . The ideas of religious liberty and freedom of conscience merely gave expression to the sway of free competition within the domain of knowledge . “ Undoubtedly , ” it will be said , “ religious , moral , philosophical , and juridical ideas have been modified in the course of historical development . But religion , morality , philosophy , political science , and law , constantly survived this change . ” “ There are , besides , eternal truths , such as Freedom , Justice , etc. , that are common to all states of society . But Communism abolishes eternal truths , it abolishes all religion , and all morality , instead of constituting them on a new basis ; it therefore acts in contradiction to all past historical experience . ” What does this accusation reduce itself to ? The history of all past society has consisted in the development of class antagonisms , antagonisms that assumed different forms at different epochs . But whatever form they may have taken , one fact is common to all past ages , viz . , the exploitation of one part of society by the other . No wonder , then , that the social consciousness of past ages , despite all the multiplicity and variety it displays , moves within certain common forms , or general ideas , which cannot completely vanish except with the total disappearance of class antagonisms . The Communist revolution is the most radical rupture with traditional property relations ; no wonder that its development involved the most radical rupture with traditional ideas . But let us have done with the bourgeois objections to Communism . We have seen above , that the first step in the revolution by the working class is to raise the proletariat to the position of ruling class to win the battle of democracy . The proletariat will use its political supremacy to wrest , by degree , all capital from the bourgeoisie , to centralise all instruments of production in the hands of the State , i. e. , of the proletariat organised as the ruling class ; and to increase the total productive forces as rapidly as possible . Of course , in the beginning , this cannot be effected except by means of despotic inroads on the rights of property , and on the conditions of bourgeois production ; by means of measures , therefore , which appear economically insufficient and untenable , but which , in the course of the movement , outstrip themselves , necessitate further inroads upon the old social order , and are unavoidable as a means of entirely revolutionising the mode of production . These measures will , of course , be different in different countries . Nevertheless , in most advanced countries , the following will be pretty generally applicable . 1. Abolition of property in land and application of all rents of land to public purposes . 2. A heavy progressive or graduated income tax . 3. Abolition of all rights of inheritance . 4. Confiscation of the property of all emigrants and rebels . 5. Centralisation of credit in the hands of the state , by means of a national bank with State capital and an exclusive monopoly . 6. Centralisation of the means of communication and transport in the hands of the State . 7. Extension of factories and instruments of production owned by the State ; the bringing into cultivation of waste-lands , and the improvement of the soil generally in accordance with a common plan . 8. Equal liability of all to work . Establishment of industrial armies , especially for agriculture . 9. Combination of agriculture with manufacturing industries ; gradual abolition of all the distinction between town and country by a more equable distribution of the populace over the country . 10. Free education for all children in public schools . Abolition of children’s factory labour in its present form . Combination of education with industrial production , &c , &c . When , in the course of development , class distinctions have disappeared , and all production has been concentrated in the hands of a vast association of the whole nation , the public power will lose its political character . Political power , properly so called , is merely the organised power of one class for oppressing another . If the proletariat during its contest with the bourgeoisie is compelled , by the force of circumstances , to organise itself as a class , if , by means of a revolution , it makes itself the ruling class , and , as such , sweeps away by force the old conditions of production , then it will , along with these conditions , have swept away the conditions for the existence of class antagonisms and of classes generally , and will thereby have abolished its own supremacy as a class . In place of the old bourgeois society , with its classes and class antagonisms , we shall have an association , in which the free development of each is the condition for the free development of all . III . Socialist and Communist Literature 1. Reactionary Socialism A. Feudal Socialism Owing to their historical position , it became the vocation of the aristocracies of France and England to write pamphlets against modern bourgeois society . In the French Revolution of July 1830 , and in the English reform agitation , these aristocracies again succumbed to the hateful upstart . Thenceforth , a serious political struggle was altogether out of the question . A literary battle alone remained possible . But even in the domain of literature the old cries of the restoration period had become impossible . * In order to arouse sympathy , the aristocracy was obliged to lose sight , apparently , of its own interests , and to formulate their indictment against the bourgeoisie in the interest of the exploited working class alone . Thus , the aristocracy took their revenge by singing lampoons on their new masters and whispering in his ears sinister prophesies of coming catastrophe . In this way arose feudal Socialism : half lamentation , half lampoon ; half an echo of the past , half menace of the future ; at times , by its bitter , witty and incisive criticism , striking the bourgeoisie to the very heart’s core ; but always ludicrous in its effect , through total incapacity to comprehend the march of modern history . The aristocracy , in order to rally the people to them , waved the proletarian alms-bag in front for a banner . But the people , so often as it joined them , saw on their hindquarters the old feudal coats of arms , and deserted with loud and irreverent laughter . One section of the French Legitimists and “ Young England ” exhibited this spectacle . In pointing out that their mode of exploitation was different to that of the bourgeoisie , the feudalists forget that they exploited under circumstances and conditions that were quite different and that are now antiquated . In showing that , under their rule , the modern proletariat never existed , they forget that the modern bourgeoisie is the necessary offspring of their own form of society . For the rest , so little do they conceal the reactionary character of their criticism that their chief accusation against the bourgeois amounts to this , that under the bourgeois régime a class is being developed which is destined to cut up root and branch the old order of society . What they upbraid the bourgeoisie with is not so much that it creates a proletariat as that it creates a revolutionary proletariat . In political practice , therefore , they join in all coercive measures against the working class ; and in ordinary life , despite their high-falutin phrases , they stoop to pick up the golden apples dropped from the tree of industry , and to barter truth , love , and honour , for traffic in wool , beetroot-sugar , and potato spirits . † As the parson has ever gone hand in hand with the landlord , so has Clerical Socialism with Feudal Socialism . Nothing is easier than to give Christian asceticism a Socialist tinge . Has not Christianity declaimed against private property , against marriage , against the State ? Has it not preached in the place of these , charity and poverty , celibacy and mortification of the flesh , monastic life and Mother Church ? Christian Socialism is but the holy water with which the priest consecrates the heart-burnings of the aristocrat . B. Petty-Bourgeois Socialism The feudal aristocracy was not the only class that was ruined by the bourgeoisie , not the only class whose conditions of existence pined and perished in the atmosphere of modern bourgeois society . The medieval burgesses and the small peasant proprietors were the precursors of the modern bourgeoisie . In those countries which are but little developed , industrially and commercially , these two classes still vegetate side by side with the rising bourgeoisie . In countries where modern civilisation has become fully developed , a new class of petty bourgeois has been formed , fluctuating between proletariat and bourgeoisie , and ever renewing itself as a supplementary part of bourgeois society . The individual members of this class , however , are being constantly hurled down into the proletariat by the action of competition , and , as modern industry develops , they even see the moment approaching when they will completely disappear as an independent section of modern society , to be replaced in manufactures , agriculture and commerce , by overlookers , bailiffs and shopmen . In countries like France , where the peasants constitute far more than half of the population , it was natural that writers who sided with the proletariat against the bourgeoisie should use , in their criticism of the bourgeois régime , the standard of the peasant and petty bourgeois , and from the standpoint of these intermediate classes , should take up the cudgels for the working class . Thus arose petty-bourgeois Socialism . Sismondi was the head of this school , not only in France but also in England . This school of Socialism dissected with great acuteness the contradictions in the conditions of modern production . It laid bare the hypocritical apologies of economists . It proved , incontrovertibly , the disastrous effects of machinery and division of labour ; the concentration of capital and land in a few hands ; overproduction and crises ; it pointed out the inevitable ruin of the petty bourgeois and peasant , the misery of the proletariat , the anarchy in production , the crying inequalities in the distribution of wealth , the industrial war of extermination between nations , the dissolution of old moral bonds , of the old family relations , of the old nationalities . In its positive aims , however , this form of Socialism aspires either to restoring the old means of production and of exchange , and with them the old property relations , and the old society , or to cramping the modern means of production and of exchange within the framework of the old property relations that have been , and were bound to be , exploded by those means . In either case , it is both reactionary and Utopian . Its last words are : corporate guilds for manufacture ; patriarchal relations in agriculture . Ultimately , when stubborn historical facts had dispersed all intoxicating effects of self-deception , this form of Socialism ended in a miserable fit of the blues . C. German or “ True ” Socialism The Socialist and Communist literature of France , a literature that originated under the pressure of a bourgeoisie in power , and that was the expressions of the struggle against this power , was introduced into Germany at a time when the bourgeoisie , in that country , had just begun its contest with feudal absolutism . German philosophers , would-be philosophers , and beaux esprits ( men of letters ) , eagerly seized on this literature , only forgetting , that when these writings immigrated from France into Germany , French social conditions had not immigrated along with them . In contact with German social conditions , this French literature lost all its immediate practical significance and assumed a purely literary aspect . Thus , to the German philosophers of the Eighteenth Century , the demands of the first French Revolution were nothing more than the demands of “ Practical Reason ” in general , and the utterance of the will of the revolutionary French bourgeoisie signified , in their eyes , the laws of pure Will , of Will as it was bound to be , of true human Will generally . The work of the German literati consisted solely in bringing the new French ideas into harmony with their ancient philosophical conscience , or rather , in annexing the French ideas without deserting their own philosophic point of view . This annexation took place in the same way in which a foreign language is appropriated , namely , by translation . It is well known how the monks wrote silly lives of Catholic Saints over the manuscripts on which the classical works of ancient heathendom had been written . The German literati reversed this process with the profane French literature . They wrote their philosophical nonsense beneath the French original . For instance , beneath the French criticism of the economic functions of money , they wrote “ Alienation of Humanity ” , and beneath the French criticism of the bourgeois state they wrote “ Dethronement of the Category of the General ” , and so forth . The introduction of these philosophical phrases at the back of the French historical criticisms , they dubbed “ Philosophy of Action ” , “ True Socialism ” , “ German Science of Socialism ” , “ Philosophical Foundation of Socialism ” , and so on . The French Socialist and Communist literature was thus completely emasculated . And , since it ceased in the hands of the German to express the struggle of one class with the other , he felt conscious of having overcome “ French one-sidedness ” and of representing , not true requirements , but the requirements of Truth ; not the interests of the proletariat , but the interests of Human Nature , of Man in general , who belongs to no class , has no reality , who exists only in the misty realm of philosophical fantasy . This German socialism , which took its schoolboy task so seriously and solemnly , and extolled its poor stock-in-trade in such a mountebank fashion , meanwhile gradually lost its pedantic innocence . The fight of the Germans , and especially of the Prussian bourgeoisie , against feudal aristocracy and absolute monarchy , in other words , the liberal movement , became more earnest . By this , the long-wished for opportunity was offered to “ True ” Socialism of confronting the political movement with the Socialist demands , of hurling the traditional anathemas against liberalism , against representative government , against bourgeois competition , bourgeois freedom of the press , bourgeois legislation , bourgeois liberty and equality , and of preaching to the masses that they had nothing to gain , and everything to lose , by this bourgeois movement . German Socialism forgot , in the nick of time , that the French criticism , whose silly echo it was , presupposed the existence of modern bourgeois society , with its corresponding economic conditions of existence , and the political constitution adapted thereto , the very things those attainment was the object of the pending struggle in Germany . To the absolute governments , with their following of parsons , professors , country squires , and officials , it served as a welcome scarecrow against the threatening bourgeoisie . It was a sweet finish , after the bitter pills of flogging and bullets , with which these same governments , just at that time , dosed the German working-class risings . While this “ True ” Socialism thus served the government as a weapon for fighting the German bourgeoisie , it , at the same time , directly represented a reactionary interest , the interest of German Philistines . In Germany , the petty-bourgeois class , a relic of the sixteenth century , and since then constantly cropping up again under the various forms , is the real social basis of the existing state of things . To preserve this class is to preserve the existing state of things in Germany . The industrial and political supremacy of the bourgeoisie threatens it with certain destruction – on the one hand , from the concentration of capital ; on the other , from the rise of a revolutionary proletariat . “ True ” Socialism appeared to kill these two birds with one stone . It spread like an epidemic . The robe of speculative cobwebs , embroidered with flowers of rhetoric , steeped in the dew of sickly sentiment , this transcendental robe in which the German Socialists wrapped their sorry “ eternal truths ” , all skin and bone , served to wonderfully increase the sale of their goods amongst such a public . And on its part German Socialism recognised , more and more , its own calling as the bombastic representative of the petty-bourgeois Philistine . It proclaimed the German nation to be the model nation , and the German petty Philistine to be the typical man . To every villainous meanness of this model man , it gave a hidden , higher , Socialistic interpretation , the exact contrary of its real character . It went to the extreme length of directly opposing the “ brutally destructive ” tendency of Communism , and of proclaiming its supreme and impartial contempt of all class struggles . With very few exceptions , all the so-called Socialist and Communist publications that now ( 1847 ) circulate in Germany belong to the domain of this foul and enervating literature . * 2. Conservative or Bourgeois Socialism A part of the bourgeoisie is desirous of redressing social grievances in order to secure the continued existence of bourgeois society . To this section belong economists , philanthropists , humanitarians , improvers of the condition of the working class , organisers of charity , members of societies for the prevention of cruelty to animals , temperance fanatics , hole-and-corner reformers of every imaginable kind . This form of socialism has , moreover , been worked out into complete systems . We may cite Proudhon’s Philosophie de la Misère as an example of this form . The Socialistic bourgeois want all the advantages of modern social conditions without the struggles and dangers necessarily resulting therefrom . They desire the existing state of society , minus its revolutionary and disintegrating elements . They wish for a bourgeoisie without a proletariat . The bourgeoisie naturally conceives the world in which it is supreme to be the best ; and bourgeois Socialism develops this comfortable conception into various more or less complete systems . In requiring the proletariat to carry out such a system , and thereby to march straightway into the social New Jerusalem , it but requires in reality , that the proletariat should remain within the bounds of existing society , but should cast away all its hateful ideas concerning the bourgeoisie . A second , and more practical , but less systematic , form of this Socialism sought to depreciate every revolutionary movement in the eyes of the working class by showing that no mere political reform , but only a change in the material conditions of existence , in economical relations , could be of any advantage to them . By changes in the material conditions of existence , this form of Socialism , however , by no means understands abolition of the bourgeois relations of production , an abolition that can be affected only by a revolution , but administrative reforms , based on the continued existence of these relations ; reforms , therefore , that in no respect affect the relations between capital and labour , but , at the best , lessen the cost , and simplify the administrative work , of bourgeois government . Bourgeois Socialism attains adequate expression when , and only when , it becomes a mere figure of speech . Free trade : for the benefit of the working class . Protective duties : for the benefit of the working class . Prison Reform : for the benefit of the working class . This is the last word and the only seriously meant word of bourgeois socialism . It is summed up in the phrase : the bourgeois is a bourgeois – for the benefit of the working class . 3. Critical-Utopian Socialism and Communism We do not here refer to that literature which , in every great modern revolution , has always given voice to the demands of the proletariat , such as the writings of Babeuf and others . The first direct attempts of the proletariat to attain its own ends , made in times of universal excitement , when feudal society was being overthrown , necessarily failed , owing to the then undeveloped state of the proletariat , as well as to the absence of the economic conditions for its emancipation , conditions that had yet to be produced , and could be produced by the impending bourgeois epoch alone . The revolutionary literature that accompanied these first movements of the proletariat had necessarily a reactionary character . It inculcated universal asceticism and social levelling in its crudest form . The Socialist and Communist systems , properly so called , those of Saint-Simon , Fourier , Owen , and others , spring into existence in the early undeveloped period , described above , of the struggle between proletariat and bourgeoisie ( see Section I. Bourgeois and Proletarians ) . The founders of these systems see , indeed , the class antagonisms , as well as the action of the decomposing elements in the prevailing form of society . But the proletariat , as yet in its infancy , offers to them the spectacle of a class without any historical initiative or any independent political movement . Since the development of class antagonism keeps even pace with the development of industry , the economic situation , as they find it , does not as yet offer to them the material conditions for the emancipation of the proletariat . They therefore search after a new social science , after new social laws , that are to create these conditions . Historical action is to yield to their personal inventive action ; historically created conditions of emancipation to fantastic ones ; and the gradual , spontaneous class organisation of the proletariat to an organisation of society especially contrived by these inventors . Future history resolves itself , in their eyes , into the propaganda and the practical carrying out of their social plans . In the formation of their plans , they are conscious of caring chiefly for the interests of the working class , as being the most suffering class . Only from the point of view of being the most suffering class does the proletariat exist for them . The undeveloped state of the class struggle , as well as their own surroundings , causes Socialists of this kind to consider themselves far superior to all class antagonisms . They want to improve the condition of every member of society , even that of the most favoured . Hence , they habitually appeal to society at large , without the distinction of class ; nay , by preference , to the ruling class . For how can people , when once they understand their system , fail to see in it the best possible plan of the best possible state of society ? Hence , they reject all political , and especially all revolutionary action ; they wish to attain their ends by peaceful means , necessarily doomed to failure , and by the force of example , to pave the way for the new social Gospel . Such fantastic pictures of future society , painted at a time when the proletariat is still in a very undeveloped state and has but a fantastic conception of its own position , correspond with the first instinctive yearnings of that class for a general reconstruction of society . But these Socialist and Communist publications contain also a critical element . They attack every principle of existing society . Hence , they are full of the most valuable materials for the enlightenment of the working class . The practical measures proposed in them – such as the abolition of the distinction between town and country , of the family , of the carrying on of industries for the account of private individuals , and of the wage system , the proclamation of social harmony , the conversion of the function of the state into a more superintendence of production – all these proposals point solely to the disappearance of class antagonisms which were , at that time , only just cropping up , and which , in these publications , are recognised in their earliest indistinct and undefined forms only . These proposals , therefore , are of a purely Utopian character . The significance of Critical-Utopian Socialism and Communism bears an inverse relation to historical development . In proportion as the modern class struggle develops and takes definite shape , this fantastic standing apart from the contest , these fantastic attacks on it , lose all practical value and all theoretical justification . Therefore , although the originators of these systems were , in many respects , revolutionary , their disciples have , in every case , formed mere reactionary sects . They hold fast by the original views of their masters , in opposition to the progressive historical development of the proletariat . They , therefore , endeavour , and that consistently , to deaden the class struggle and to reconcile the class antagonisms . They still dream of experimental realisation of their social Utopias , of founding isolated “ phalansteres ” , of establishing “ Home Colonies ” , or setting up a “ Little Icaria”* – duodecimo editions of the New Jerusalem – and to realise all these castles in the air , they are compelled to appeal to the feelings and purses of the bourgeois . By degrees , they sink into the category of the reactionary [ or ] conservative Socialists depicted above , differing from these only by more systematic pedantry , and by their fanatical and superstitious belief in the miraculous effects of their social science . They , therefore , violently oppose all political action on the part of the working class ; such action , according to them , can only result from blind unbelief in the new Gospel . The Owenites in England , and the Fourierists in France , respectively , oppose the Chartists and the Réformistes . IV . Position of the Communists in Relation to the Various Existing Opposition Parties Section II has made clear the relations of the Communists to the existing working-class parties , such as the Chartists in England and the Agrarian Reformers in America . The Communists fight for the attainment of the immediate aims , for the enforcement of the momentary interests of the working class ; but in the movement of the present , they also represent and take care of the future of that movement . In France , the Communists ally with the Social-Democrats* against the conservative and radical bourgeoisie , reserving , however , the right to take up a critical position in regard to phases and illusions traditionally handed down from the great Revolution . In Switzerland , they support the Radicals , without losing sight of the fact that this party consists of antagonistic elements , partly of Democratic Socialists , in the French sense , partly of radical bourgeois . In Poland , they support the party that insists on an agrarian revolution as the prime condition for national emancipation , that party which fomented the insurrection of Cracow in 1846. In Germany , they fight with the bourgeoisie whenever it acts in a revolutionary way , against the absolute monarchy , the feudal squirearchy , and the petty bourgeoisie . But they never cease , for a single instant , to instil into the working class the clearest possible recognition of the hostile antagonism between bourgeoisie and proletariat , in order that the German workers may straightway use , as so many weapons against the bourgeoisie , the social and political conditions that the bourgeoisie must necessarily introduce along with its supremacy , and in order that , after the fall of the reactionary classes in Germany , the fight against the bourgeoisie itself may immediately begin . The Communists turn their attention chiefly to Germany , because that country is on the eve of a bourgeois revolution that is bound to be carried out under more advanced conditions of European civilisation and with a much more developed proletariat than that of England was in the seventeenth , and France in the eighteenth century , and because the bourgeois revolution in Germany will be but the prelude to an immediately following proletarian revolution . In short , the Communists everywhere support every revolutionary movement against the existing social and political order of things . In all these movements , they bring to the front , as the leading question in each , the property question , no matter what its degree of development at the time . Finally , they labour everywhere for the union and agreement of the democratic parties of all countries . The Communists disdain to conceal their views and aims . They openly declare that their ends can be attained only by the forcible overthrow of all existing social conditions . Let the ruling classes tremble at a Communistic revolution . The proletarians have nothing to lose but their chains . They have a world to win . Working Men of All Countries , Unite ! 