Získejte zpět peníze za nevyužitý software: Jak na prodej bazarových licencí

6. 6. 2025

Sdílet

licence, prodej druhotný Autor: Radan Dolejš s podporou AI

Máte ve firmě nevyužívané licence Microsoft Office, Windows nebo další firemní software? Víte, že je můžete legálně prodat a získat zpět část investovaných peněz? Evropská legislativa umožňuje firmám odprodat trvalé softwarové licence, které už nepotřebují – a na českém trhu se takto každý rok prodá druhotný software za více než 100 milionů korun. Potenciál je přitom ještě výrazně vyšší.

Tento segment tak představuje pro podniky možnost, jak efektivně zhodnotit své nevyužité licence, typicky například starší verze Microsoft Office nebo Windows, které zůstaly po přechodu na cloudová řešení nebo novější produkty. 

Budoucnost šifrování: Jak se firmy připravují na postkvantovou éru s kyberexpertem Petrem Kunstátem
Budoucnost šifrování: Jak se firmy připravují na postkvantovou éru s kyberexpertem Petrem Kunstátem
0:00/

Evropská legislativa takový postup umožňuje, pokud jsou splněny základní podmínky – především doložení původu licence, což je klíčové i při případných auditech. Evropský soudní dvůr už v roce 2012 rozhodl, že výrobce softwaru nemůže bránit dalšímu prodeji použitých licencí, a to ani v případě, že byly původně pořízeny formou stažení z internetu.

Podle propočtů brněnské společnosti Forscope, která patří mezi největší hráče v této oblasti, se v Česku ročně prodají bazarové licence na software za zhruba 100 milionů korun. Firma odhaduje, že potenciál tuzemského trhu je až pětinásobný. Forscope působí na devíti trzích střední a východní Evropy, kde podle svého odhadu vidí potenciál trhu s druhotným softwarem přesahující šest miliard korun ročně.

Mezi klienty Forscopu patří nejen komerční firmy, ale i státní správa – například DPD, Zásilkovna, Cendis, město Třinec, ministerstvo zahraničních věcí, České dráhy, Příbram nebo nemocnice v Olomouci, Brně a Znojmě.

Chcete dostávat do mailu týdenní přehled článků z Computertrends? Objednejte si náš mailový servis a žádná důležitá informace vám neuteče. Objednat si lze také newsletter To hlavní, páteční souhrn nejdůležitějších článků ze všech našich serverů. Newslettery si můžete objednat na této stránce.

Největší zájem o druhotné licence je v Česku ve výrobním sektoru, který tvoří 11 % trhu, následují IT firmy zaměřené na opravy a obnovu dat (8 %) a stavební sektor se 7 %. Významnou část tvoří také veřejné instituce, které hledají úspory v IT rozpočtech. 

Forscope uvádí, že díky chytrému licenčnímu modelu ušetřily české firmy a instituce dohromady téměř dvě miliardy korun na IT nákladech. Podle šéfa Forscopu Jakuba Šuláka je stále mnoho firem, které netuší, že druhotný software je v EU plně legální, pokud splňuje čtyři základní podmínky. Právě doložení původu je základní a často vyžadovanou podmínkou při auditech.

„Kromě licencí Microsoftu vidíme ještě potenciál v licencích pro starší produkty VMwaru,“ říká Jakub Šulák.

Druhotné licence jsou dlouhodobě kontroverzním tématem, zejména kvůli tlaku některých výrobců softwaru. Úřad pro ochranu hospodářské soutěže však v roce 2021 rozhodl, že nasazování softwarových licencí z druhé ruky je v pořádku. 

Pro firmy, které chtějí efektivně spravovat svůj softwarový majetek, tak představuje sekundární trh s licencemi stále významnější alternativu k tradičním nákupům přímo od výrobců. Vedle úspory nákladů je prodej nevyužitých licencí také možností, jak získat zpět část investice při přechodu na nové technologie nebo cloudová řešení.

Miliardy ukradených cookies jsou volně na netu. Jsou aktivní a jsou i z Česka Přečtěte si také:

Miliardy ukradených cookies jsou volně na netu. Jsou aktivní a jsou i z Česka

Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »