 Okay, hi everyone. It seems that according to the number of people here and most of the people are rich already and don't need any money. Anyway, who has some open-source project? Okay, and who has some open-source project which is actually used not only by yourself? Nice. So why am I giving this talk anyway? I'm the author of three open-source projects. The first one is more or less popular. The second one is also doing good and the third one was well, it was a mistake. It's not used by anyone, but anyway, it was an interesting exercise. At some point I started to think if I have a successful open-source project, maybe I can make some money out of it, right? So just to give you a brief idea about this Python RedMain project it exists for three years by now. It has 255 stars on GitHub, which doesn't seem to be a lot, but it depends with what to compare because for example the most successful PHP client for RedMain exists already for five years and has 500 stars, so I think we're doing good there. There are there are approximately 70 unique visitors per day and yeah, and around 9,000 downloads per month. So as you can see really nothing special here, I mean any one of you can come up with a project like this. So I still was able to make some money with it, so let's see what I've tried. So at first I decided to try donations, the most obvious choice. I remembered these nice buttons that I saw in a lot of projects. And I thought this should work. It needs a way to make money. So I registered at one of these services, put a button on the website and linked to the readme file and I started to dream about money. So I waited one month, two months, three months, nothing. I didn't receive a single donation in three months. By the way, did any one of you ever donate to some project? Okay. So I thought maybe I'm using the wrong service and I registered at another one and the result was the same, nothing changed. And no one even tried to contact me saying like, hey Max, I tried to donate but something didn't work, you know, I was really depressed and I didn't know what was wrong. I mean a lot of people claim that they received donations, so unfortunately I didn't succeed. But in the meantime people were opening GitHub issues and a download counter was growing, so everything was fine, but still donations didn't work. I don't know why. I don't know what was wrong. Maybe I just didn't have these nice users in my user base. So let's go quickly through pros and cons of donations. First of all, it's the easiest way of receiving money and it can be tax-free if done properly. What properly is heavily depend on your country, so you better consult with your tax advisor. But these ease, it comes at a cost. So actually it's not really free because these donation services ask you for a fee for transactions, so let's say if someone donates you one euro, you'll receive actually, let's say, 70 euro cents, for example. So some of these services require you to be a non-profit, registered as a non-profit. Some of these services don't accept payments from all over the world, so some users won't be able to donate at all. And finally, in most of the services, you will need to have a bank account in US or so-called European Union Trusted Countries. So if you want to go with donations, choose your service wisely, read the terms and conditions carefully. So the donations didn't work for me, but I didn't give up. I decided to add another possible source of money, sponsorship. So how can this work in theory? This is very rarely happens, but a company, if a company is really a heavy user of your project, they can suggest you a permanent full-time job to work on your project. A company or individual can pay you for implement a specific feature that is very urgently needed, or you can offer extended support for a small fee, like 20 for 7 support by phone, for example. Speaking about pros and cons, the good part is that you will have established relationships. You will have an order from a customer, and if you do your job properly and on time, the chances are very high that you will receive more requests from this customer again. The bad part is that this will be considered as an income, so you will have to pay taxes and also you now will have obligations. So if before this project was just a hobby for you, and you could devote as much time as you want to do, now you will have deadline for some specific feature to be implemented, and you'll have to manage more time more carefully. So, yeah, regarding sponsorship, I put this link also information that I am ready. I'm ready, please. Send me requests. So, I'm very patient person. I waited for one year. No one contacted me ever. Actually, it's not really true. There was one guy. He contacted me and he asked me to implement something, but then he just disappeared. So yeah, it didn't work for me as well. So the next thing that you can do is to to use advertisement or nag wear techniques. So the idea is simple. You registered some ad network like Google for Google ad, for example, and put a banner on your website and you just earn some money when someone clicks on it and you can also add this nag wear techniques in your project, meaning when a software constantly like let's say pops up some window asking to pay to get rid of this window or you can insert some random timeouts or some other weird things which can annoy your user and make them pay. So regarding pros and cons, everything is obvious here. It's very easy to do and it's basically do nothing income because once you set up everything you just need to wait for money to come. But on the other side it annoys your users and you may lose them completely and this of course will also be considered as an income, so be prepared to pay taxes. I didn't try to didn't try this way of making money because I don't think this would be appreciated by my users. So I started to search for something else. Another option of making money is collaborative funding, which is very close to the nations with the only difference that in collaborative funding you raise funds for a specific feature to be implemented or specific bug to be fixed. So there are several projects that successfully use this way of making money like PyPy or Django REST framework and a lot of projects raise funds on Bounty Sources platform. So yeah. Yes, regarding pros and cons, it's the same as the nations plus you have obligations here because if you raise some funds of course people expect you to implement this feature or fix this bug by a specific date. This is also something that I didn't want to try because I already had a very bad experience with the nations. So finally this brings us up to a freemium model. The idea is very simple. You have a free version with some basic functionality and you have a premium version with some additional features. And you know why this finally worked. So this is what I will talk about next. But because it's not that simple as it sounds. So regarding pros and cons of this freemium model, there are no obligations, no deadlines, you're the boss, you decide when and what to release. You can choose a proper payment gateway and which means that if you choose the right one, you will be able to accept payments from the worldwide and you will be able to set up some additional payment systems and instead of the usual visa or MasterCard only policy, which a lot of services have. And you will also be able to set up prices per country. For example, if you want to support people in Africa, you can set up a very low price for them, which will be controlled by checking that the card was issued in this country. And of course, this will be considered as an income and you have to pay fees for the payment gateway. Either pay transaction or per month it depends on the gateway policy. So we decided to go with this freemium model. Now we want to find out how can we restrict our free version. So the most obvious is to make it feature limited, meaning some features will only be available in the premium version. It can also be capacity limited. Let's say you're writing some data processor tool and you can restrict the free version by only processing files, not larger than one gigabyte, for example. Another option is to limit support channels. So let's say your users only receive support on GitHub with free version or and that with the premium version you add the mail or telephone support or users of free version don't receive support at all. You can also add a seat restriction, which means that this the free version can only be used on one computer, but not across the network. And you can introduce storage space limitations, which is suitable for software as a service model. Let's say you have an image processing service and it's open sourced on GitHub, but you can also host it yourself with a nice user interface and users can upload files, let's say, only for five megabytes with a free account. And there can be other restrictions as well, of course, that just depends on the product and your fantasy. For my product, I chose features, feature restrictions and support limitations. So the next step is to figure out the licensing problem. The common approach here is to go with dual licensing, which means that there are two licenses, one for free version and the second one for the premium version. So I suggest you to have a look at these two websites. The first one is from open source initiative, which lists almost all possible licenses, and the second one is from GitHub people. It is very nice and intuitive user graphical interface, which can help you to choose the right license. And you can also see here a list of most popular licenses. For my project, I chose Apache license, which is also used by Python requests. Django, for example, uses PSD3, and basically you need to invest some time and to read all these licenses to figure out which is right for your project. After we chose the license for the free version, we need to choose the license for the premium one. This is more complicated, but there is an easy way. There is a nice license generator, which you can see on this slide. It's just part of the form, and you just need to fill the form, and you will get the generated license. And if you feel paranoid, you can just insert some fake data and then just modify it on your local computer. So the next question is, how are we going to distribute our product? With free version, it's easy and obvious. You just upload it to PyPI with how to distribute the premium version. So the answer is to host a private PyPI server with authentication. So there are different options available for this purpose. Some of them have more features than others, but because we just want to start selling and we don't want to invest more time into setting up this PyPI service, we don't know how good our sales will be. I think there is no point in going with any of these options. There's an easier way. So we're just going to use Apache as our private PyPI server. What you basically need to do is to create a PyPI folder in the root, create .htxs file with the contents shown on this slide. And depending on the Apache version, you may not need the last two lines. And you need to create a folder which has the name of your project and put project-related files generated by setup tools inside. And we'll also need a .htxs password file with access data for our users. Let's have a look at it quickly. So on the left side, we can see a .htxs password file with access data for 16 users. This data is encoded for Apache to understand it. And on the right, we have an access data for the same 16 users, but it's not encoded. This is what we will give to our users when they will buy our premium version. So now the question is how to generate these codes. The quick and dirty implementation of this generator. You need to specify the amount of codes you want to generate, the path to .htxs password and the file with clean passwords. And that's it. You basically run this generator code once and until you reach the specified number of sales, you don't have this problem anymore. And you upload this generated code to the payment gateway, which will do the distribution for you. And here's an example how we can use our new private PyPI server with PIP. Basically, it's absolutely the same as standard PIP installed. You just have to add minus i option to tell PIP that it should access our private PyPI server and not the public one. This approach with the Apache server takes five minutes to set up and we can use Apache log files to drag the user activity. And if we, if our sales will go really well, we can just add a full feature to PyPI server transparently for our users. So we're almost done. The last question is how or where to sell? So the easiest option is to sell at some online marketplace. The problem with this approach is because not many people are trying to sell their Python projects. There is no Python specific marketplace, or at least I wasn't able to find it. And usually, marketplaces charge you more per transaction or introduce additional fees because they don't have their own solutions for payment processing. So they need to pay some payment provider their fees. And yeah, there are also limited customization options and limited options to withdraw money. Basically, you will only have only one option just to monthly transfer money to a bank account. So the next option is Internet acquiring. This is usually provided by your bank, where you have your bank account. Basically, this is just a page where user enters the card access details and press the buy button and the transaction happens. The good thing about Internet acquiring is that you will have the lowest possible fees. But there are other problems. First, this is a very low level solution, which means that you will have to write some code to integrate with this. And because this is provided by your bank, usually only cards are accepted, meaning no PayPal or other options. And usually, there are no customization options available at all. And the money will go to your account in this bank. And that will be the only option that you will have. So, and finally, our winner, it's the payment provider. The integration is very easy. Usually, you don't have to write any code at all, though most of the providers also give you an API if you want to implement some low level integration and to control all the aspects of integration. There are usually several options provided to withdraw money. And there are a lot of customization options available and a lot of different payment methods. But fees are usually higher than Internet acquiring or but still lower than the marketplace ones. So, let's have a brief overview of some of the payment providers. So, here we have a list of some payment providers together with the value of the charge per transaction. If your customers pay with a Visa or MasterCard, value charged usually depends on the payment method used by your customer. So, let's say if you choose a Braintree and your customer will pay with American Express, they will charge you 2.9 percent instead of 1.9. Or let's take Paylane, if your customer pays with American Express, here they will charge you only 15 Euro cents without any percentage. But for JCB, for example, which is widely used in Japan, Paylane will charge you 3.6 percent plus 25 Euro cents. So, you'll really have to choose your payment provider carefully. You have to read all these terms and conditions. And regarding, for example, Avangate, it has the highest fee but the thing is that they work with almost all the countries. So, for example, if you're in Russia, most of these providers won't work for you but Avangate will because brave people work there probably. And Avangate also allows you to send your money to a special prepaid MasterCard option which is provided by a company called Payoneer which gives you a number of interesting opportunities as well. So, fitting it all together, the first step is to develop a premium version of the product, then to prepare project licenses, then you need to register the main name and set up SSL certificate for it because without that a payment gateway will refuse to register you. And also if you want to have HTTPS support, then people won't be happy and you will have to add the special trusted host option. Then you need to set up private PIPI and upload your premium version there. Next, you need to sign up for the chosen payment gateway and upload your generated codes there. Or you can also set up dynamic access codes, generation mechanism, which if it's supported by the payment provider. And you can finally start selling. So, what will happen when someone wants to buy your product? They will fill in the payment details and then they will receive an email with instructions, how to download, how to install the application, your package from your private PIPI repository. So, your customer can just copy and paste this and install the package with people's usual. So, what if you don't have a project? Create one. I mean, don't be afraid to try. When I started my project three years ago, I didn't have an idea that I would be standing here in front of you, telling you how I succeeded. It takes some time, of course, for success to come, but just find the right idea and be patient that it should work. And that's it. If you have any questions, ask. Thank you. Thanks, Max. Very interesting presentation. Many questions. Hi. What do you think about the bounty source model? Do you think? Because as far as I can see, it's not very used. So, do you think it's the model that it's broken or the website, the service? Well, good question. Good question. Yeah, I also noticed that it's not really popular and not really used, but still some projects use it. I don't know. I mean, from my point of view, the model is nice and right, but I don't know why people just don't use it. I also had a dilemma about how to monetize open source. I actually earned two euros in donations and all my careers open source developers. I want to ask what do you think about the ethics of SAAS, Software as a Service, if you've tried that and what do you think about the model for open source ethics? That's what I mean. Can you repeat the last part? Open source is kind of like having an ideology. I want to know what's your opinion about doing it as a software, as a service, as a cloud service? Yeah. Actually, I like this idea very much because, as I said, I mean, I gave an example so you can open source the core, maybe, of the project on GitHub and then you can implement some nice service for your users on top of it. This way you will have a lot of users in the open source community who will send you patches and fixes maybe for your box. I know some projects that use this model successfully, so I think it's nice. I would also use it, but I just didn't come up with the right idea. Okay. I was wondering what about bitcoins or stuff like that for payments. Have you thought about it? Does it work? No, I didn't think about that. I didn't see any payment provider that supports it. I'm sure there are some, but I didn't really search for them. I mean, you can use a payment provider, BitPay or stuff like this, but you can also just give you a Bitcoin address and send me something, so you wouldn't need a payment provider and so you don't pay a fee or you don't need a bank account or anything like this, and people from all over the world can send you money without currency conversion issues. So look into it. Maybe something to consider. Thanks. Okay. We don't have time for more questions. You can of course ask, you know. Let's thank again Max for this very interesting presentation. Thanks, Max.